SQL注入是如何完成的?
可能重复:
XKCD SQL注入 - 请解释
什么是SQL注入背后的一般概念?
作为Rails开发者
这是不安全的
Booking.find(:all, :conditions => [ 'bookings.user_id = #{params[user_id]]}'] )
这是安全的: -
Booking.find(:all, :conditions => [ 'bookings.user_id = ?', params[user_id]] )
我对吗?
所以我的问题是如何完成SQL注入? 这些人如何做这样的事情。 任何现场示例/教程哪里有人展示这种东西。 任何知道逻辑的基本知识。
SQL注入发生在程序员懒惰时。 一个易受攻击的查询将如下所示:
DECLARE @cmd varchar(256)
SET cmd='SELECT @col FROM Table'
EXEC @cmd
@col是一个传入存储过程的变量。
通常,用户将输入一个已存在的变量列。 但更狡猾的用户可以输入这样的内容:
* FROM Table; DROP DATABASE data;--
* FROM表; 完成了前面的陈述。 然后,DROP DATABASE数据; 是不好的事情的负载,在这种情况下,删除数据库。 最后,注释掉查询的其余部分,以免从注入中获得任何错误。
所以,而不是执行这个:
SELECT column
FROM Table
你得到这个:
SELECT *
FROM Table;
DROP DATABASE data;
--
哪个不好。
和这个:
所有用户必须做的是输入:
1234; DROP TABLE BOOKINGS
...
我不知道轨道,但通过执行此Booking.find(:all, :conditions => [ 'bookings.user_id = #{params[user_id]]}'] )
,您可能会冒用户给user_id值1 OR 1=1
,如您所见,它会修改您的请求。
随着更多的注射,你可以做一些像1; DROP TABLE BOOKINGS
1; DROP TABLE BOOKINGS
等
基本上,注入只是“劫持”添加你的基本请求。
鲍比桌子
链接地址: http://www.djcxy.com/p/93807.html