2013-08-16 2 views
0

Предполагаю, что я разбираю файл журнала, который был отправлен некоторым пользователем и хранит проанализированные данные в базе данных MySQL.MySQL, как правильно обрабатывать строки, содержащие код/​​межсайтовый скриптинг?

Теперь, если пользователь достаточно велик, он может отправить файл журнала, содержащий строку, аналогичную nickname=<script>alert(hello);<script>. Парсер хватал бы все за равным знаку и выполнил INSERT INTO nicknames (name) VALUE ('<script>alert(hello);</script>').

Я пробовал немного и понял, что mysqli_real_escape_string() предотвращает появление строки в logfile, такой как nickname=' AND 1 = 2, из-за разрыва запроса путем экранирования '. Я предположил, что это также касается <script>/</> и других кодов/символов, но, видимо, я был неправ.

В случае, указанном выше, когда пользователь отправляет файл журнала, содержащий строку nickname=<script>alert(hello);<script>, столбец nicknames.name будет содержать значение <script>alert(hello);<script>.

Позже эти значения считываются из таблицы и отображаются, один псевдоним в строке в <table> на веб-сайте. Конечно, в этом случае он не отображает «ник»; выполняется межсайтовый скрипт. Вместо строки таблицы, содержащей псевдоним, появляется сообщение с сообщением «привет».

Есть ли общий способ предотвращения межсайтового скриптинга с функцией, аналогичной функции mysqli_real_escape_string()? Какое правильное решение к этой проблеме, или, может быть, даже лучшее?

Ofcourse Я мог бы содрать < и > перед INSERT ИНГАМИ в колонну, но я предпочел бы так, что бы просто отобразить прозвище даже с <script> тегом в нем, в таблице.

С уважением

ответ

2

вы можете использовать htmlspecialchars конвертировать все синтаксис HTML-теги для соответствующих организаций. это приведет к отображению буквального значения <script>alert('name');</script> вместо того, чтобы интерпретировать его как блок сценария.

+0

Именно то, что я искал, спасибо! – phew

Смежные вопросы