: .
Web 用户密码用明文保存,例如 2011 年 12 月多家网站数据泄露,其中就发现国内知名技术网站居然
也用明文存储用户密码。单纯的客户密码复杂度高还是不够,服务器的坑爹的实现还是会导致客户裸
奔。
用户密码可以被特殊操作覆盖。例如不正确的实现密码更改功能、恢复密码功能等都有可能造成
密码被直接更改。
网页 URL 中包含 Session ID。例如你发现一个有趣的网页,然后把链接通过聊天工具贴给其他
人,但是这个链接中包含了你的 session id,别人点击这个链接就直接使用了你的 session,同时他
也可以作任何你可以在该网站上允许的操作,例如买张手机冲值卡。
Session ID 不会 timeout,或者 session/token/SSO token 在登出的时候没有将其失效。
用户认证信息、Session ID 使用未加密连接传输。这里要提一下博客园的认证连接也是不加密
的,通过抓报工具很容易抓到用户的密码信息。目前来说我们可以做的是为博客园专门设置一个密码,
千万别用自己自己信用卡或支付宝密码。
防御
推荐直接使用被广泛应用的认证控件及 Session 管理模块。
3. 跨站脚本(Cross-Site Scripting (XSS))
允许跨站脚本是 Web 时代网站最普遍的问题。如果网站没有对用户提交的数据加以验证而直
接输出至网页,那么恶意用户就可以在网页中注入脚本来窃取用户数据。
示例例如网站通过以下代码直接构造网页输出,
(String) page += "<input name='creditcard' type='TEXT' value='" +
("CC") + "'>";
攻击者输入以下数据,
'><script>=
'-bin/ ?foo='+</script>'.
当该数据被输出到页面的时候,每个访问该页面的用户 cookie 就自动被提交到了攻击者定义好
的网站。
防御
推荐将所有用户输入数据进行转义
激进的方法是提供一个白名单控制用户输入
对于富文本输入可以使用 anti-xss library 来处理输入,例如 Microsoft AntiXSS library.
4. 直接对象引用(Insecure Direct Object References)
这个问题在动态网页中也相当普遍,指的是页面存在对数据对象的键/名字的直接引用,而网站
程序没有验证用户是否有访问目标对象的权限。
示例
例如一个网站通过以下代码返回客户信息,
String query = "SELECT * FROM accts WHERE account = ?";
PreparedStatement pstmt = (query , … );
( 1, ("acct"));
ResultSet results = ( );
攻击者可以通过修改 querystring 来查询任何人的信息
?acct=notmyacct
防御使用用户级别或
Web API 入门指南 - 闲话安全 来自淘豆网m.daumloan.com转载请标明出处.