阻止Session欺骗以提高网站安全性

Session欺骗一直是入侵者们搞破坏的手段之一,尤其是遇上大意的程序员时,网站安全就存在很大的风险了。eWebEditor编辑器就曾经出现过session欺骗漏洞。下面就拿eWebEditor编辑器曾经的这个漏洞来说吧。

vb 代码
 
  1. If Session("eWebEditor_User") = "" Then
  2. Response.Redirect "admin_login.asp"
  3. Response.End
  4. End If

这个session只是判断是否为空,而并没有判断session里的具体值。其实,即使这样,入侵者如果没有当前域名下的webshell,哪怕取得了同一服务器下其他站点的webshell,同样是无法构造Session欺骗 的。因为 session 是需要验证主机头的,在本地构造 或 在同服务器下其他域名下构造session 都不会成功。

但为了安全,作为程序员或站长,我们可以通过以下几点来加强我们网站程序的安全性,防止session欺骗!

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

vb 代码
 
  1. If Session("eWebEditor_User") <> "jdskfJIEO_joiwelCN324FE" Then
  2. Response.Redirect "admin_login.asp"
  3. Response.End
  4. End If

注意,jdskfJIEO_joiwelCN324FE 这个值要保证没有第二人知道,当然,如此复杂,如何记得住啊哈哈

另外,在判断登陆是否成功的时候,不要只写下面的代码:

sql 代码
 
  1. "select * from admins where user='"&request("user")"' and password='"&request("password")&'""

正确写法

vb 代码
 
  1. sql="select * from admin where user='"&过滤后的用户名"'"
  2. rs.open sql,conn,1,1
  3. If rs.eof and rs.bof Then
  4. response.write "<SCRIPT language=JavaScript>alert('非法登录!');"
  5. response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
  6. response.end
  7. else
  8. If rs("password")<>MD5(password) Then
  9. response.write "<SCRIPT language=JavaScript>alert('非法登录!');"
  10. response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
  11. response.end
  12. else
  13. session("admin_USER_FMIS")="jdskfJIEO_joiwelCN324FE"
  14. End If
  15. End If

 总之,看完上面的分析之后,其实,Session欺骗并不是多么恐怖。只要我们在写程序的时候稍微留意一下,写出来的代码的安全性就会增加不少!