Привет, ребята, у меня есть вопрос, есть ли что-то, что я мог бы использовать при вставке данных в SQL для предотвращения XSS? Вместо этого, читая его.
Например, у меня есть довольно много выходных данных из моего sql, которые созданы пользователем, можно ли просто сделать это безопасным при вводе SQL или мне нужно сделать его безопасным, когда он покинет SQL?
TL: DR Могу ли я использовать что-то вроде htmlspecialchars при вставке данных в SQL для предотвращения XSS, это будет какая-то хорошая защита?
Я думаю, что в этом вопросе есть несколько вещей.
В общем, вы не можете предотвратить XSS с проверкой ввода , за исключением очень особых случаев, когда вы можете проверить ввод для чего-то verz строго, как только числа.
Рассмотрим эту html-страницу (предположим, что <?=
Используется для вставки данных в ваш html на вашем серверном языке, потому что вы намекали на PHP, может, конечно, отличаться от используемого языка):
<script> var myVar = <?= var1 ?>; </script>
В этом случае var1
на сервере не обязательно должен иметь какой-либо специальный символ, для ввода javascript достаточно букв. Может ли это быть полезным для злоумышленника, зависит от нескольких вещей, но технически это будет уязвимым для XSS с почти любой проверкой ввода. Конечно, такое назначение в настоящее время не может быть в вашем Javascript, но как вы убедитесь, что этого никогда не будет?
Другим примером является, очевидно, DOM XSS, где вход никогда не попадает на сервер, но это совсем другая история.
Предотвращение XSS – это кодирование вывода. В некоторых случаях помощь по вводу данных может помочь, но в большинстве случаев не обеспечит достаточной защиты.
Как правило, не рекомендуется хранить значения html-encoded в вашей базе данных . С одной стороны, это делает поиск, упорядочение, любую обработку намного более громоздкой. С другой стороны, это нарушает единую ответственность и разделение проблем. Кодирование – это вещь уровня представления, ваша база данных базы данных не имеет ничего общего с тем, как вы хотите представить эти данные. Это еще более подчеркивается, когда вы рассматриваете разные кодировки. HTML-кодировка поддерживается только в том случае, если вы хотите записать данные в контекст HTML. Если это javascript (в теге скрипта или в атрибуте on *, например onclick, или в нескольких других местах), html-кодировка недостаточна, не говоря уже о том, где у вас больше специальных выходов. Ваша база данных не обязательно должна знать, где будут использоваться данные, это выходная информация, и поэтому она должна обрабатываться видами.
Вы должны проверить вход для символов белого списка с помощью регулярного выражения, например, например, [aZ] [0-9]. У вас будет большая головная боль, если вы попробуете наоборот, используя черный список, потому что есть гигантские способы использования ввода и их улавливание – большая проблема
Также обратите внимание на SqlInjections. Вы должны использовать SqlMap для linux для проверки уязвимости вашего сайта