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

上一篇: how SQL injection is done?

下一篇: What is SQL injection?