2011-01-09 3 views
1

мой сайт имеет команду PHP:Почему мой запрос не работает?

mysql_query("SELECT * FROM users WHERE id=" . $_GET["id"]) or die(mysql_error()); 

Когда я ввожу URL-адрес

http://example.com/index.php?id=1;%20UPDATE%20users%20SET%20password=123%20WHERE%20id=1 

Я получаю следующую ошибку:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE users SET password=abc WHERE id=1' at line 1

Но в phpmyamin запрос выполняется успешно. Что здесь не так? Почему он не выполняется в браузере?

+8

Ум, вы пытаетесь SQL-инъектировать свой собственный запрос? Это безумно безопасно. – Yahel

+1

@yc: Наверное, как эксперимент или для ударов – BoltClock

+0

Я написал этот сайт еще двум разработчикам, и один из них допустил эту ошибку. Я хочу написать ему письмо с примером атаки нападающего, которое может подделать, и хочу, чтобы этот пример был больше, чем просто «1 AND 1 = 0 UNION SELECT ...». Он новичок, и будет хорошо продемонстрировать ему, насколько серьезен этот недостаток. – Poma

ответ

4

mysql_query() не поддерживает несколько запросов в один вызов (который вы пытаетесь внедрить):

SELECT * FROM users WHERE id=1; 
UPDATE users SET password=abc WHERE id=1 

Таким образом, «синтаксическая ошибка» ,

Теперь пойдите, защитите этот запрос.

7

«mysql_query() посылает уникальный запрос (множество запросов не поддерживается)»

Если вы не намерены позволить инъекции MySQL подобные, mysql_query не понравится. Если нет, mysql_real_escape_string($_GET["id"]); предотвратить «инъекции»

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