|
|
|
| Так как задача достаточно специфичная и не объёмная решил не оценивать скрипты по читабельности и тонкостям, так как, ИМХО, чем менее читабельны SQL-инъекции и чем меньше тонкостей они учитывают, тем лучше для окружающей среды :) Оценки производились по опасности: сможет ли и с какой эффективностью использовать готовую SQL-инъекцию дебил, который с трудом читает и не способен к самостоятельному построению SQL-инъекций. А также по защите, насколько эффективна предложенная защита
NNN опасн защит
001 1 4
002 3 5
003 4 5
004 5 5
|
| |
|
|
|
|
|
|
|
для: cheops
(13.03.2006 в 00:26)
| | Интересно отметить, что никто не использовал регулярные выражения
<?php
if(!preg_match("|^[\d]+$|",$_GET['id_user'])) exit("Не верный формат вывода");
?>
|
что наверное верно, так как регулярные выражения не назовёшь самым читабельным вариантом защиты, тем не менее им также можно воспользоваться, так как его использование даёт гарантированную защиту от посягательств, так как ничего кроме целых чисел не будет пропущено. | |
|
|
|
|
|
|
|
для: cheops
(13.03.2006 в 00:31)
| | Здраствуйте.
Объясните, каким образом с пом. скл-инъекции можно
прочитать пароль?
Ведь нигде в скрипте не нету echo $row['pass'].
У меня ни один вариант не прокатил (mysql 4.1.8). | |
|
|
|
|
|
|
|
для: ed209
(15.03.2006 в 16:19)
| | В строку запроса вместо http://localhost/user.php?id_user=1 необходимо подставить SQL-инъекцию, например, из http://www.softtime.ru/forum/read.php?id_forum=7&id_theme=14376
http://localhost/user.php?id_user=0+union+select+id_user,name,pass,version()+as+email,pass+as+url+from+userslist+where+id_user=2
|
Для инъекции и не нужно поле $row['pass'], пароль путём манипуляций со вторым SELECT-запросом в UNION подставляется в поле name или любое другое поле, которое выводится в окно браузера. | |
|
|
|
|
|
|
|
для: cheops
(15.03.2006 в 21:40)
| | с приведёным вами выше запросом, мне пишут это:
ошибка
Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation 'UNION'
Что это значит?
А вот с таким запросом:
user.php?id_user=99 UNION SELECT 0,pass,0,0,0 FROM userslist LIMIT 0,1
|
Выдаётся -> User name - cheops, и никаго пароля((( | |
|
|
|
|
|
|
|
для: ed209
(15.03.2006 в 23:28)
| | У вас кодировки не совпадают в запросе и в базе - скрипт ориентирован на ситуацию, когда в качестве кодировки используется cp1251. | |
|
|
|
|
|
|
|
для: cheops
(16.03.2006 в 00:37)
| | Вторая строка из решения была как раз под такой случай. Так что со скриптом всё ОК :) | |
|
|
|
|
|
|
|
для: ed209
(15.03.2006 в 23:28)
| | там и имя и пароль у ID=1 были cheops =) Т.ч. всё работает | |
|
|
|