rov*_*ver 5 regex sql-injection ruby-on-rails rackattack
首先,我要说的是,我采取了一些措施来确保SQL注入攻击失败.所有SQL查询值都是通过活动记录预处理语句完成的,所有运算符(如果不是硬编码的)都是通过数字白名单系统完成的.意思是如果有人想通过"ILIKE"进行搜索,他们会传递6,如果他们想通过"="进行搜索,他们会传递1,等等.
我还定期使用Brakeman和Rails SQL Injection指南来查看代码.
因此,我希望阻止尝试的SQL注入器有三个原因.
目前我的想法是针对请求路径和参数运行一个简单的正则表达式匹配,以便标记最明目张胆的SQL注入尝试并将这些ips列入黑名单,所以使用机架攻击.
injection_regex = /SOMEREGEXHERE/
Rack::Attack.blacklist('sql injection blacklist') do |req|
Rack::Attack::Fail2Ban.filter(req.ip, :maxretry => 5, :findtime => 10.minutes, :bantime => 24.hours) do
CGI.unescape(req.query_string).match(injection_regex) || req.path.match(injection_regex)
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是创建一个正确的标记一个简单的SQL注入尝试的正则表达式,但不会导致常规用户的任何问题.我认为一些误报是可以的,这就是为什么上面的黑名单系统在第一场比赛后没有列入黑名单的原因.
在我的搜索中,我发现了很多关于这个问题的问题,但是它们似乎都是这样的,人们提出使用正则表达式来检测SQL注入的问题,另一个人回答你不应该以这种方式停止SQL注入,问这些问题的人回答他们不会使用正则表达式来停止,而只是为了检测,然后是一堆无用的评论.
那么,这样的正则表达式是否有可能仅仅作为一种检测手段,最小的误报,或者这样的兔子整体是否值得努力?
此链接应该为您提供开始的模式.
http://larrysteinle.com/2011/02/20/use-regular-expressions-to-detect-sql-code-injection/
文本块
'(''|[^'])*'
Run Code Online (Sandbox Code Playgroud)
SQL语句
\b(ALTER|CREATE|DELETE|DROP|EXEC(UTE){0,1}|INSERT( +INTO){0,1}|MERGE|SELECT|UPDATE|UNION( +ALL){0,1})\b
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2602 次 |
最近记录: |