Показать сообщение отдельно
  #1 (permalink)  
Старый 20.02.2017, 20:22
Аватар для Black_Star
Профессор
Отправить личное сообщение для Black_Star Посмотреть профиль Найти все сообщения от Black_Star
 
Регистрация: 11.07.2016
Сообщений: 300

Защита для input и textarea ?
Добрый день уважаемые. Задался вопросом защиты html документа от вредоносных скриптов. На форумах вычитал что основная форма "отсеивания" вредоносного кода должна происходить на стороне сервера. (Согласно объяснениям злоумышленник может отключить JS а зараженное сообщение всё равно будет отсылаться) Хотел узнать насколько это утверждение верно, и всё таи какие есть методы по защите?
В пример приведу самую простую форму из одного input и textarea
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
</head>
<body>
	
	<form id="form" action="send.php" method="POST">
		<div class="box-email">
			<input name="email" type="email" placeholder="your_email@gmail.com" autofocus
			required>
		</div>
		<div class="box-message">
			<textarea name="textMessage" id="textMessage" cols="30" rows="5"
			placeholder="You can write me some message" required></textarea>
		</div>
		<div class="send-box">
			<input type="submit" value="Send">
		</div>
	</form>
	
	<script src="script.js"></script>
</body>
</html>

То чем я попробовал отфильтровать данную форму в php
<?php
$textMessage = $_POST['textMessage'];
$email = $_POST['email'];

// Filters
$textMessage = htmlspecialchars($textMessage);
$email = htmlspecialchars($email);

$textMessage = urldecode($textMessage);
$email = urldecode($email);

$textMessage = trim($textMessage);
$email = trim($email);

if (mail("for_spam@gmail.com", "Заявка с сайта", "Суть письма:"."\n".$textMessage."\n"."E-mail: ".$email ,"From: for_spam@gmail.com \r\n"))
	{     echo "сообщение успешно отправлено";
} else {
	echo "при отправке сообщения возникли ошибки";
}
?>

Из всех методов что я вычитал самые часто встречаемые стали фильтрация на тег <script> и заменять угловые скобки и амперсанд на их спецсимволы.
function sanitizeHTML(html) {
    var doc = document.implementation.createHTMLDocument("Test");
    doc.body.innerHTML = html;
    var nodes = doc.querySelectorAll("script,style,link,object");
    for (var i=0, len=nodes.length; i < len; i++) {
        nodes[i].parentNode.removeChild(nodes[i]);
    }
    return doc.body.innerHTML;
}


str = str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");

Может ещё кто чего присоветует, и по JS и по php
Ответить с цитированием