2010-02-07 4 views
0

Возможные Дубликаты:
XKCD sql injection - please explain
What is SQL injection?Что такое SQL-инъекция?

Я видел термин "инъекция SQL", но до сих пор не понимаю. Что это?

+6

обязательна ссылка XKCD: http://xkcd.com/327/ – cobbal

+4

Дубликат многие, многие SO вопросов, в том числе: http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain –

+0

Возможный дубликат? – Zombies

ответ

1

SQL Injection - это то, где злоумышленник может манипулировать данными, которые они отправляют вам, таким образом, что ваша программа должна использовать некоторые из них в качестве команд SQL.

Для примера можно посетить here

alt text

1

При создании запроса SQL обычно содержат все вроде битов и фрагментов, некоторые из которых поступают из пользовательского ввода. Например, если у вас есть приложение «Поисковая книга» в вашем приложении, тогда имя книги является строкой, исходящей от пользователя.

Умные, злые пользователи могут манипулировать входами, которые они отправляют в ваше приложение, так что SQL-запрос, построенный с этого входа, будет вреден.

Так что, если вы строите свой запрос так:

String q = "Select * from books where name='" + bookName + "'" 

Затем хакер может найти книгу под названием "x'; delete from books where name like '%"

Конечным результатом будет то, что следующий запрос будет выполнен: Select * from books where name='x'; delete from books where name like '%'

Это удалит все записи таблицы книг. Стандартный способ избежать этого - всегда использовать подготовленные инструкции при построении запросов, включающих предоставленные пользователем части.

+0

Ваш пример объясняет мне концепцию sql-инъекции. thanx – ruchi

6

SQL-инъекция - это то, где кто-то вставляет что-то вредоносное в один из ваших SQL-запросов.

Давайте предположим, что у вас есть SQL запрос следующим образом:

select * from people where name = '<name>' and password = '<password>' 

Теперь давайте предположим, что <name> и <password> заменяются типами что-то кто-то на вашем сайте. Если кто-то напечатал это в качестве пароля ...

' or '' = ' 

... то результирующий запрос будет:

select * from people where name = 'someone' and password = '' or '' = '' 

... который был явно не ваши намерения. Вы можете узнать больше об этом here.

+0

ваше предложение мне очень поможет. thanx очень ...... – ruchi

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