Ребят, нашел на своем сайте уязвимость. В бд можно записать любую строчку, и потом в одном месте он выводит данные из бд не фильтруя. Т.е XSS есть(алерт пишется,выводится и срабатывает). Это исправленно.
Было так: собираются данные со разных источников, при нажатии на кнопку шел запрос к скрипту который сразу писал в бд инфу.
Теперь: собираются данные со разных источников,формируется хеш, при нажатии на кнопку отправляется в скрипт который сверяет хэш, и если все ок, то в бд пишется инфа.
Но меня больше интересует SQL инъекция. сейчас фильтруются все кавычки (комментируются обратным слешем, аж 4 шт, хз зачем)
если отправить с скрипт: ' UNION SELECT 1
в бд пишется: \\\\' UNION SELECT 1
Этого достаточно чтоб не было инъекции?
Можно пример когда это не поможет? (надо :) )
PS двиг куплен у фрила. ОН уверяет что SQL тут не пройдет.
Так то теперь все хэшируется в md5(с некоторыми манипуляциями+соль) и сверятся перед любыми действиями. И подменить результат теперь не реально.
Но мне просто интересно, возможна ли тут SQL инъекция?
Просто возможно что строка с SQL придет сразу из источника информации. Достаточно того что он комментирует кавычки?
Вопрос крайне абстрактный. Надо смотреть в код конкретно.
Для защиты от sql injection достаточно использовать PDO или mysqli_real_escape_string на все аргументы в запросах.
Для защиты от xss нужно фильтровать данные на выводе
Дмитрий Энтелис: mysqli_real_escape_string может не спасти, т.к. не всегда для инъекции необходимо использовать кавычки, пример из ссылки выше:
$iId = mysql_real_escape_string("1 OR 1=1");
$sSql = "SELECT * FROM table WHERE id = $iId";