程序代码注入
Shell注入
我们先来看一段perl的代码:
use CGI qw(:standard); $name = param('name'); $nslookup = "/path/to/nslookup"; prinCT * FROM users WHERE (name = '' OR '1'='1') and (pw = '' OR '1'='1');"
也就是实际上运行的SQL命令会变成下面这样的,因此导致无帐号密码,也可登录网站。
strSQL = "SELECT * FROM users;"
这还不算恶劣的,真正恶劣的是在你的语句后再加一个自己的语句,如:
username= "' ; DELETE FROM users; --";这样一来,要么整个数据库的表被人盗走,要么被数据库被删除。
当他们发现一个网站有SQL注入的时候,他们一般会干下面的事:
盗取数据表中的数据,例如个人机密数据(信用卡,身份证,手机号,通讯录……),帐户数据,密码等,获得用户的数据和信息后对这些用户进行“社会工程学”活动(如:我前两天在微信上亲身经历)。
取得系统管理员权限(例如ALTER LOGIN sa WITH PASSWORD=’xxxxxx’)。
在数据库中的数据中插入一些HTML/JS代码,有可能得以在网页加入恶意链接以及XSS,这样一来就让访问者被黑。
经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统(例如:MS SQL Server的 xp_cmdshell “net stop iisadmin”可停止服务器的IIS服务)。甚至破坏硬盘数据,瘫痪全系统(例如xp_cmdshell “FORMAT C:”)。
现在的黑客比较坏,瘫痪系统的事,他们干的越来越少,因为没什么利益,他们希望通过获取用户的帐号信息后,转而攻击用户别的帐号,如游戏帐号,网银帐号,QQ帐号等等他们可以获利的事情(这就是为什么我希望大家在不站点上使用不同的口令,甚至不同的用户信息的原因)
如何避免
在组合SQL字符串时,先针对所传入的参数作字符转义(如:将单引号字符取代为连续2个单引号字符)。如果使用PHP开发网页程序的话,亦可打开PHP的Magic quote功能自动将所有的网页传入参数,将单引号字符取代为连续2个单引号字符。如果可能应该过滤以下字符:分号“;”,两个减号“–”,单引号“’”,注释“/* … */”。(当然,因为注入攻击一般用闭合的引号来玩,所以把引号转义了应该就没有什么问题了)
更换危险字符。例如在PHP通过addslashes()函数保护SQL注入。
限制用户输入的长度,限制用户输入的取值范围。
为当前应用建立权限比较小的数据库用户,这样不会导致数据库管理员丢失。
把数据库操作封装成一个Service,对于敏感数据,对于每个客户端的IP,在一定时间内每次只返回一条记录。这样可以避免被拖库。
如何避免
要防止XSS攻击,一般来说有下面几种手段:
严格限制用户的输入。最好不要让用户输入带标签的内容。最好不要让用户使用一些所见即所得的HTML编辑器。
严格过滤用户的输入。如:
PHP的htmlentities()或是htmlspecialchars()或是strip_tags()。
()
()。
-validator。
Java的xssprotect 。
在一些关键功能,完全不能信任cookie,必需要用户输入口令。如:修改口令,支付,修改电子邮件,查看用户的敏感信息等等。
限制cookie的过期时间。
对于CRSF攻击,一是需要检查http的reference header。二是不要使用GET方法来改变数据,三是对于要提交的表单,后台动态生成一个随机的token,这个token是攻击者很难伪造的。(对于token的生成,建议找一些成熟的lib库)
另外,你可能觉得网站在处理用户的表单提交就行了,其实不是,想一想那些Web Mail,我可以通过别的服务器向被攻击用户发送有JS代码、图片、Flash的邮件到你的邮箱,你打开一看,你就中招了。所以,WebMail一般都禁止显示图片和附件,这些都很危险,只有你完全了解来源的情况下才能打开。电子邮件的SMTP协议太差了,基本上无法校验其它邮件服务器的可信度,我甚至可以自己建一个本机的邮件服务器,想用谁的邮件地址发信就用谁的邮件地址发信。所以,我再次真诚地告诉大家,请用gmail邮箱。别再跟我说什么QQMail之类的好用了。
上传文件
上传文件是一个很危险的功能,尤其是你如果不校验上传文件的类型的话,你可能会中很多很多的招,这种攻击相当狠。试想,如果
程序代码注入 来自淘豆网m.daumloan.com转载请标明出处.