Предполагаю, что я разбираю файл журнала, который был отправлен некоторым пользователем и хранит проанализированные данные в базе данных 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>
тегом в нем, в таблице.
С уважением
Именно то, что я искал, спасибо! – phew