Как санировать параметры для использования в JavaScript?
У меня есть следующий код PHP:
<?php $redirect_lp = $_GET['lp']; ?>
<script>
setTimeout(function(){
window.location.href = "<?php echo $redirect_lp; ?>";
}, 10)
</script>
как мне продезинфицировать $redirect_lp
?
Я знаю, что этот код плох из-за этой атаки:
http://example.com/index.php?lp="-alert (" XSS \ n \ n "% 2bdocument.domain) -"
чтобы защитить от этого конкретного нападения, я santizie для "
:
$redirect_lp = str_replace("\"", "", $redirect_lp);
этого достаточно?
3 ответа
Сначала удалите все незаконные символы из $redirect_lp
переменной, затем проверьте, является ли это действительным URL:
<?php
$redirect_lp = $_GET['lp'];
// Remove all illegal characters from a url
$redirect_lp = filter_var($redirect_lp, FILTER_SANITIZE_URL);
?>
<?php if (filter_var($redirect_lp, FILTER_VALIDATE_URL)): ?>
<script>
setTimeout(function(){
window.location.href = "<?php echo $redirect_lp; ?>";
}, 10)
</script>
<?php endif; ?>
Существует множество способов отфильтровать строку в PHP. Вот один из способов дезинфекции URL
:
// Remove all illegal characters from a url
filter_var($redirect_lp, FILTER_SANITIZE_URL);
Или же вы можете отфильтровать входные данные, как вы получите:
$redirect_lp = filter_input(INPUT_GET, 'lp', FILTER_SANITIZE_SPECIAL_CHARS);
В основном вам нужно использовать функцию htmlspecialchars()
всякий раз, когда вы хотите вывести в браузер что-то, полученное из пользовательского ввода.
Правильный способ использовать что-то вроде этого (достаточно, чтобы предотвратить XSS-атаку):
echo htmlspecialchars($redirect_lp, ENT_QUOTES, 'UTF-8');
После этого вида санитарии, что вы можете проверить URL (filter_var()
с FILTER_VALIDATE_URL
пометить) и разрешить дальнейшие шаги для перенаправления пользователя на указанную страницу, если проверка прошла успешно.
PS: Вы также можете использовать strip_tags()
, но имейте в виду, что он удаляет теги, но не специальные символы, такие как "
или же '
так что если вы используете strip_tags()
Вы также должны использовать htmlspecialchars()
,