htmlspecialchars избежать Javascript? - PullRequest
1 голос
/ 11 октября 2011

Я наткнулся на эти вопросы:

Ребята, знаете ли вы, если функция htmlspecialchars также экранирует javaScript от пользовательского ввода?

Спасибо

Ответы [ 4 ]

5 голосов
/ 11 октября 2011

Ну, чтобы ответить на ваш вопрос, это зависит.Если вы делаете:

<p><?php echo htmlspecialchars($userInput); ?></p>

Тогда они не смогут внедрять скрипты в ваше приложение.

ОДНАКО :

Если вы пытаетесь это сделать:

<script>
    var foo = '<?php echo htmlspecialchars($userInput); ?>';
</script>

Вы не безопасны.См. Правило № 3 в Шпаргалке OWASP XSS .

Чтобы защитить это, вам нужно использовать функцию экранирования с поддержкой JS.Вы можете json кодировать его, если вам просто нужен строковый литерал, но я бы использовал ESAPI для PHP, чтобы позаботиться об этом.

2 голосов
/ 11 октября 2011

В соответствии с руководством заменены следующие символы:

  • '&' (амперсанд) становится '&amp;'
  • '"' (двойная кавычка) становится '&quot;', если ENT_NOQUOTES не задано.
  • "'" (одинарная кавычка) становится '&#039;' только при установленном ENT_QUOTES.
  • '<' (меньше чем) становится '&lt;'
  • '>' (больше чем) становится '&gt;'

Таким образом, тег <script> будет изменен, но Javascript внутри может изменяться или не изменяться в зависимости от того, какие символы он содержит.

2 голосов
/ 11 октября 2011

Руководство по PHP точно скажет, какие символы изменяются функцией.

Не имеет значения, содержит ли указанная вами строка HTML или JS или что-то еще.Он просто делает эти переводы для любой строки, которую вы ей даете.

Поскольку HTML и JS используют разные escape-символы, это делает произвольные данные «безопасными» для использования в HTML, что включает в себя обеспечение безопасности некоторых JS для использования в HTML.

например,

$js = "if (foo && bar) { return false; }"
echo "<button onclick='" . htmlspecialchars($js) . "'>click</button>"

Выводит:

<button onclick='if (foo &amp;&amp; bar) { return false; }'>click</button>

Таким образом предотвращая нарушение скрипта специальным значением, которое & имеет в HTML.

Это не сделает строку безопасной для использования в JavaScript, поскольку она не затрагивает такие символы, как \, которые имеют там особое значение.

0 голосов
/ 11 октября 2011

Конечно, это так.<script> изменено на &lt;script&gt;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...