межсайтовый скриптинг (xss) атака - PullRequest
4 голосов
/ 08 июня 2011

У меня только один простой вопрос об атаке XSS.Я знаю, что вы можете предотвратить их, очистив входные данные формы, но у меня такой вопрос, как насчет поискового ввода (например, общий поиск на веб-сайте)?Должны ли мы дезинфицировать входящие данные?Я имею в виду, что это просто поисковый ввод, пользователь должен иметь возможность искать все, что он / она хочет на веб-сайте.Пожалуйста, дайте мне некоторые разъяснения по этому поводу.

Спасибо

Ответы [ 5 ]

7 голосов
/ 08 июня 2011

Я знаю, что вы можете предотвратить их, очистив входные данные формы

Нет, вы должны предотвратить их, очистив выходные данные .Поэтому в базе данных (или где-либо еще) вам нужно передать данные как есть и обработать их непосредственно перед тем, как вы покажете их пользователю

3 голосов
/ 08 июня 2011

То есть на этот вопрос уже ответили zerkms

Выполнение санации sql-инъекций из любого пользовательского ввода, касающегося базы данных, требует mysql_real_escape_string($_REQUEST['search'])

На выходе, если вы показываете, что пользователь искал как"Вы искали:" использовать htmlentities(strip_tags($_REQUEST['search']), ENT_QUOTES);

Тогда ваш сейф от входящих и исходящих

1 голос
/ 21 июня 2011

SQL-инъекция и XSS - две разные (хотя и несколько связанные) атаки. Они связаны с тем, что, по сути, это сводится к тому, что ненадежные данные выходят из контекста, в который они помещены, и впоследствии выполняют непредвиденные операции.

Для ознакомления с лучшими практиками построения защиты я рекомендую ознакомиться с OWASP Шпаргалка по предотвращению инъекций SQL и их Шпаргалка по профилактике XSS .

OWASP выдвинул ESAPI Project , который включает в себя инструменты для кодирования для различных контекстов, в которых могут использоваться ненадежные данные:

  • encodeForSQL
  • encodeForHTML
  • encodeForHTMLAttribute
  • encodeForJavaScript
  • encodeForCSS
  • encodeForURL

Эта библиотека доступна для ряда языков, включая Java, .NET, PHP , Classic ASP, Cold Fusion, Python и Haskell. Он также может выполнять проверку ввода, если это необходимо.

Некоторые организации, использующие ESAPI, включают American Express, Apache Foundation, Booz Allen Hamilton, Aspect Security, Foundstone (McAfee), Hartford, Infinite Campus, Lockheed Martin, MITER, ВМС США - SPAWAR, Всемирный банк, Институт SANS ,

И наконец - кодирование должно выполняться непосредственно перед интерпретацией (чем ближе, тем лучше). Пример: Непосредственно перед тем, как дать компоненту UI ненадежные данные для их кодирования. Компонент пользовательского интерфейса не может доверять серверу - он должен кодировать.

1 голос
/ 08 июня 2011

как насчет использования htmlpurifier?

1 голос
/ 08 июня 2011

Я просто хочу добавить еще один момент к обсуждению здесь.Вы сказали:

Я имею в виду, это просто поисковый ввод, пользователь должен иметь возможность искать все, что он / она хочет на сайте.

ВотГотча: часто поисковый термин будет напечатан в документе, который отображается после поиска.Т.е. "Вы искали:«Вот где у вас будет уязвимость XSS, если вы не проводите дезинфекцию этого материала.

Если вы думаете« но мы этого не делаем », имейте в виду, что вы можете этого не делать сейчас , но вы можете сделать это в будущем . И если вы не устраните эту уязвимость сейчас, вы, скорее всего, забудете сделать это позже - так что лучше просточтобы пресечь это в зародыше.

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