论坛首页 Ruby版 rails

paginate的:conditions参数如何防止SQL注入攻击

浏览 1426 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-08-22
   @topic_pages,@topics = paginate(:topics, 
                                    :conditions => conditions, 
                                    :per_page => 13)



上面是一个简单的分页查询语句,conditions是条件(如 'board_id=1')。如果conditions从页面转入,就需要考虑到SQL注入攻击的安全问题。比如用户把输入改成了 'board_id=1 or 1=1'。

怎么防范,谁做过方面的研究??
   
最后更新时间:2007-08-22
顶!
还有,像用radrails建的controller后它的edit等方法也都默认建好了,可以用controller/action/id这样的方法访问,如果别人直接用
http://www.domain.com/controoller/edit/1
这样的URL过来不是可以直接修改系统中的记录了吗?还是有什么地方可以设置或修改的。
(,可能有很多东西还没看到,希望,谢谢!)
   
0 请登录后投票
最后更新时间:2007-08-22
你可以用rails内建的helper对这些参数进行过滤
   
0 请登录后投票
最后更新时间:2007-08-22
:conditions => ['board_id = ?', params['board_id']]

用这样的语句就可以自动给用户输入加上引号,可以避免SQL Injection。
   
0 请登录后投票
最后更新时间:2007-08-23
simon_lin 写道
顶!
还有,像用radrails建的controller后它的edit等方法也都默认建好了,可以用controller/action/id这样的方法访问,如果别人直接用
http://www.domain.com/controoller/edit/1
这样的URL过来不是可以直接修改系统中的记录了吗?还是有什么地方可以设置或修改的。
(,可能有很多东西还没看到,希望,谢谢!)



这个在controller里要写权限判断逻辑,少不了的一步
   
0 请登录后投票
最后更新时间:2007-08-23
robbin 写道
你可以用rails内建的helper对这些参数进行过滤


就是不知道是哪个方法
   
0 请登录后投票
最后更新时间:2007-08-23
cvu 写道
:conditions => ['board_id = ?', params['board_id']]

用这样的语句就可以自动给用户输入加上引号,可以避免SQL Injection。



这样当然没问题,但如果传入参数千差万别,现在是查board下的所有topics,下次也可能是查user所属的所有topics。所以我选择在前台传入构造好的condition,后台方法就一个搞定了。
   
0 请登录后投票
最后更新时间:2007-08-28
:conditions => ['board_id = ?', params['board_id']]这种方法是官方推荐的防止注入的方法,Agile Web Development with Rails里面写的很清楚。

如果有很多参数可以用:conditions=>[conditions, params],参数传递进去是支持Hash的。
http://blog.waynedeng.com/article.asp?id=627。

你在前台构造好condition就不怕被伪造?传入后台执行可就危险了。
   
0 请登录后投票
论坛首页 Ruby版 rails

跳转论坛:
JavaEye推荐