2016-05-01 4 views
2

Я пытаюсь изучить SQL-инъекции, чтобы я мог защитить себя в будущем.Basic sql injection

Вот PHP код:

$req = mysql_query("INSERT INTO ip_change VALUES('', '".$_SESSION['id']."', '".$_POST['raison']."')") or die(mysql_error()); 

И пользователь имеет полный контроль над $ _POST [ 'Raison'] содержание.

Когда я использую 'hello, как [ 'Raison'] значение $ _POST я получаю

У Вас есть ошибка в вашем SQL синтаксиса; в руководстве, соответствует версии сервера MySQL для корректного синтаксиса использовать вблизи «привет»)»в строке 1

Когда я использую '); DELETE * FROM tabledetest;") or die(mysql_error());-- в $ _POST [„Raison“] значение я получаю

У вас возникла ошибка в синтаксисе SQL; в руководстве, соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать вблизи «DELETE * FROM tabledetest;") или умереть (mysql_error()); - ')' в строке 1

Так что я не понимаю, почему мой запрос не введен, и я не могу удалить свою tabledetest таблицу.

Любая помощь будет оценена.

+0

Вы можете чтобы посмотреть, что делает [инструмент тестирования] (http://sqlmap.org), чтобы проверить ваше экранирование. Это не всегда так просто, как добавление цитаты. – tadman

+5

Возможно, вам следует прекратить использование 'mysql' и начать использовать' mysqli' или PDO. – Amous

+2

@Amous По иронии судьбы для целей этого упражнения это на самом деле лучший инструмент. Это печально известно. – tadman

ответ

1

для защиты от SQL инъекций не следует вводить переменные непосредственно запрос используется Prepared Statements.

+5

В этой ситуации OP хочет непосредственно впрыскивать переменные, поскольку первая строка говорит * Я пытаюсь изучить SQL-инъекции, чтобы я мог защитить себя в будущем. * – Sean

3

Это потому, что вы не сделали правильной инъекции!

Вот что вы сделали. Авто-формат подскажет вам:

<?php 
$_SESSION['id'] = "123"; //Just assume 

$req = mysql_query("INSERT INTO ip_change VALUES('', '123', ''hello')") or die(mysql_error()); 

Это не было должным образом завершено.

Для следующего:

$req = mysql_query("INSERT INTO ip_change VALUES('', '123', ''); DELETE * FROM tabledetest;") or die(mysql_error());--')") or die(mysql_error()); 
  1. От the manual:

mysql_query() посылает уникальный запрос (несколько запросов не поддерживаются) текущей активной базы данных по сервер , связанный с указанным link_identifier.

mysqli имеет оповещение об multiple statements.

  1. -- не может комментировать код PHP!PHP комментарий // или #

Некоторые ссылки, которые могут помочь вам: [Похожа на свой вопрос]

  1. https://en.wikibooks.org/wiki/PHP_Programming/SQL_Injection_Attacks
  2. http://roshanbh.com.np/2007/12/sql-injection-attack-examples-and-preventions-in-php.html
  3. SQL injection test - mysql_query
+0

Вопрос теперь в том, чтобы сделать эту нерабочую инъекцию что-то плохое. – tadman

+0

Я объяснил для вопроса OP: _I не понимаю, почему мой запрос не впрыскивается – Thamilan

+2

Я получаю так много, но можете ли вы правильно его ввести? – tadman