Как санировать параметры для использования в 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(),

Другие вопросы по тегам