飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

Session欺骗如何防范?

Author:flymorn Source:飘易
Categories:网络技术 PostTime:2009-5-9 23:29:03
正 文:
    Session欺骗一直以来就是入侵者们喜而乐道的一大法宝,尤其是遇上大意的程序员时,黑客们就可以干他们的入侵、提权的事了。06年的时候,eWebEditor编辑器就曾经出现过session欺骗漏洞,一时被爱好者们讨论的特火朝天。直到今天,依然有很多的工具在扫描此类编辑器的漏洞

    其实,Session欺骗远没有那么恐怖。只要程序员稍微留意一下,这些所谓的Session欺骗就根本不能成功。我们来看看一般的Session欺骗是如何欺骗的:

    就拿eWebEditor编辑器说事吧,虽然这个漏洞早就被修复。

    
If Session("eWebEditor_User") = "" Then
Response.Redirect "admin_login.asp"
Response.End
End If

    这个session只是判断是否为空,而并没有判断session里的具体值。

    其实,即使这样,入侵者如果没有当前域名下的webshell(如果你有了webshell,还需要欺骗么?呵呵),哪怕取得了同一服务器下其他站点的shell,同样是无法构造 Session欺骗 的。因为 session 是需要验证主机头的,在本地构造 或 在同服务器下其他域名下构造session 都不会成功。

    但为了安全,作为程序员或站长,我们应该如何加强我们网站程序的安全性来防止session欺骗呢?

    其实很简单,判定session的具体值!在赋值session的时候,这个值不要太大众化了,越个性越好,并且如果你的程序曾经在互联网上公开发布过的话,你一定要自己重新构造这个session值,防止有些不轨之徒下载你写的程序来分析你的session漏洞。

    我们只要这么验证就行了:

    
If Session("eWebEditor_User") <> "ok_WEHK5jkhkkj876ddfg" Then
Response.Redirect "admin_login.asp"
Response.End
End If

    注意,ok_WEHK5jkhkkj876ddfg 这个值要保证没有第二人知道。

    当然,我们在给session赋值的时候,用的就是这个独特的session值!

    另外,在判断登陆是否成功的时候,记住不要这样写:

    
"select * from admins where user='"&request("user")&"' and password='"&request("password")&'""

    而要这样写:

sql="select * from admin where user='"&过滤后的用户名&"'"
rs.open sql,conn,1,1
If rs.eof and rs.bof Then
response.write "<SCRIPT language=JavaScript>alert('非法登录!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
else
If rs("password")<>MD5(password) Then
response.write "<SCRIPT language=JavaScript>alert('非法登录!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
else
session("admin_USER_FMIS")="ok_WEHK5jkhkkj876ddfg"
End If
End If

    具体为什么,请大家思考吧。

    总之,安全在今天这样“黑客”越来越猖獗的的环境下越来越凸显它的重要性。作为站长们,谁希望自己的网站被入侵者们拿去做他们的肉鸡呢?!
作者:flymorn
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:买了一部 Nokia 5800XM 手机
下一篇:看看黑客都在用工具扫描网站的什么
5条评论 “Session欺骗如何防范?”
2009-5-11 10:13:38
感谢分享 沙发支持
2 徒弟甲
2009-5-11 10:30:47
看了师傅的文章,独特的session值这个了解了.至于下面判断登陆是否成功判断过滤后的用户名这个了解.是防注入,但为什么要把MD5加密的密码分开判断呢?
sql="select * from admin where user='"&过滤后的用户名&"' and password='"&MD5加密过的密码&"'"
这样写的区别还是不太明白.希望师傅讲解一下.
3 徒弟甲
2009-5-13 8:52:53
师傅这两天很忙?没有更新文章嘛,希望有时间的时候帮我解答一下疑惑.谢谢
4 flymorn
2009-5-13 9:02:22
to 徒弟甲:如果你的用户名、密码严格过滤后,是可以像你这样写的;但如果不进行过滤,那么通过简单的or 1=1 就能绕过密码验证了。
5 徒弟甲
2009-5-16 17:28:03
学习了。谢谢。
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2010 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有 渝ICP备07006361号