|
|
|
|
|
для: qsef
(07.07.2009 в 22:14)
| | И будут сравниваться хеши, а не код, т. е. sql injection будет невозможна.
Это далеко не так, не путайте sql запрос с выводом в браузер
Инъекция будет возможна в любом случае при неграмотной обработке входящих данных, не думайте что изобрели "кремлёвскую таблетку".
Пример инъекции Вам привёл Trianon, Вы судя по всему пропустили это мимо ушей, раз до сих пор думаете защититься от зловредов при помощи md5 | |
|
|
|
|
|
|
|
для: Trianon
(07.07.2009 в 21:42)
| | >На вычисление хеша будет положено на 4 порядка больше ресурсов, чем на экранирование кавычек!
Ага, понял. Просто возникла такая идея и я спросил.
>И?
И будут сравниваться хеши, а не код, т. е. sql injection будет невозможна. | |
|
|
|
|
|
|
|
для: qsef
(07.07.2009 в 20:55)
| | >Почему хеши? В переменной $name может быть зловредный код и если сравнить его напрямую, то код исполнится(имеется ввиду, что $name необработанная переменная).
Так обработайте её перед укладыванием в запрос! Зачем же извращаться-то?
На вычисление хеша будет положено на 4 порядка больше ресурсов, чем на экранирование кавычек!
>А md5() преобразует код в хеш.
И? | |
|
|
|
|
|
|
|
для: Trianon
(07.07.2009 в 20:47)
| | Почему хеши? В переменной $name может быть зловредный код и если сравнить его напрямую, то код исполнится(имеется ввиду, что $name необработанная переменная).
А md5() преобразует код в хеш. | |
|
|
|
|
|
|
|
для: qsef
(07.07.2009 в 20:37)
| | этот код принципиально другой. Его даже можно применить без особой опаски.
Хотя опять же неясно, зачем сравнивать хеши, если можно сравнить сами имена. | |
|
|
|
|
|
|
|
для: Trianon
(07.07.2009 в 18:08)
| | Вообще идея была такая, в выражении сравниваются два хеша, если символы внутри функции md5() разные, то и хеши будут разные и как результат не совпадут.
"SELECT * FROM tbl WHERE md5(alias) = '".md5($name)."'";
|
| |
|
|
|
|
|
|
|
для: qsef
(07.07.2009 в 17:42)
| | >Просто у меня есть запрос:
>"SELECT id FROM tbl WHERE name = '$name'";
Это не запрос. Это целое выражение вида
"SELECT id FROM tbl WHERE name = '" . $name . "'"
|
которое еще нужно вычислить до того, как его результат может быть станет запросом.
Даже если
>$name - это строка из GET-запроса:
>
А если нет? | |
|
|
|
|
|
|
|
для: Trianon
(07.07.2009 в 13:41)
| | >Если не экранированы - md5 от зловредного кода никак не спасет.
Вот это я и хотел узнать.
Просто у меня есть запрос:
"SELECT id FROM tbl WHERE name = '$name'";
|
$name - это строка из GET-запроса:
Большое спасибо. | |
|
|
|
|
|
|
|
для: qsef
(07.07.2009 в 12:54)
| | если в $name кавычки уже экранированы - никакого зловредного кода не будет.
Если не экранированы - md5 от зловредного кода никак не спасет.
Пример (для исправленных синтаксических ошибок) :
Судя по тому, что Вы до сих пор ошибку не исправили, весь этот диспут - корм совершенно не в коня.
Пример для Вашего случая :
Формально допуская, однако, что автор кода куда хитрее, чем кажется...
нет. Тогда бы он не стал применять md5 с обеих сторон от знака равенства. | |
|
|
|
|
|
|
|
для: Valick
(07.07.2009 в 12:45)
| | Если в $name будет зловредный код, то md5() преобразует его в хеш.
В запросе сравниваются два хеша: ...WHERE md5(name) = md5($name)
если они не совпадают, то и не выполняются. Вот я и спрашиваю, возможна ли здесь атака? | |
|
|
|
|