URL中允许携带sessionid带来的安全隐患分析_JSP编程

图示:

   下图是从测试组发来的安全报告中剪出来的,图有些小问题,本来想重画1个,在visio中没找到合适的图。所以只能用别人的图了。

       

 

说明:   

  让我们对上图的步骤进行详细说明:   

  1. 黑客用自己的帐号登录,假设登录页面是:http://www.abc.com/login.jsp   

  2. 服务器返回登录成功。   

  3. 黑客从cookie中查看自己的sessionid,比如是1234   

  4. 黑客把带自己sessionid的地址发送给一般用户。http://www.abc.com/login.jsp;jsessionid=1234(不同的语言带sessionid的方式不一样,着是jsp的方式)   

  5. 用户在黑客给的地址中用自己的帐号进行登录,登录成功。(这个时候用户登录的信息就会覆盖黑客之前的登录信息,而且2个人用的是同1个sessionid)   6. 黑客刷新页面,看到的账户信息就是用户的信息了,而不是之前黑客自己帐号的信息。

 

防治:  

  要防止这种问题,其实也很简单,只要在用户登录时重置session(session.invalidate()方法),然后把登录信息保存到新的session中。

 

后语:  

  可能你跟我一样,刚开始看到这个时候,就自己去测试到底能不能钓鱼成功,经过我的测试是可以成功的,但测试过程中需要注意下面几个问题:  

  1. 要注意你使用的语言是如何在URL中带sessionid。(我测试的时候开始在URL中使用大写的jsessionid,导致一直不起效)    

  2. 要http://www.abc.com/login.jsp;jsessionid=1234页面登录表单的action也带上了jsessionid,不然也没用。对于这个问题你可能觉得如果login.jsp表单的action是写死,而不是读取当前URL的,     可能就不会出现这个钓鱼问题。这只能防住1个方向。黑客可以做1个和login.jsp一模一样的页面(比如http://www.abc1.com/login.jsp),然后把这个地址发个客户,而这个地址中的表单这样写就可以:   <form action="http://www.abc.com/login.jsp;jsessionid=1234" ....
[作者]:BearRui(AK-47)
[博客]: http://www.cnblogs.com/BearsTaR/

时间: 2024-10-28 06:14:06

URL中允许携带sessionid带来的安全隐患分析_JSP编程的相关文章

URL中允许携带sessionid带来的安全隐患

很多WEB开发语言为了防止浏览器禁止了cookie而无法识别用户,允许在URL中携带sessionid,这样虽然方便,但却有可能引起钓鱼的安全漏洞. 图示: 下图是从测试组发来的安全报告中剪出来的,图有些小问题,本来想重画1个,在visio中没找到合适的图.所以只能用别人的图了. 说明: 让我们对上图的步骤进行详细说明: 1. 黑客用自己的帐号登录,假设登录页面是:http://www.abc.com/login.jsp 2. 服务器返回登录成功. 3. 黑客从cookie中查看自己的sessi

url中带上sessionId

url 中如何带上sessionId呢? http://localhost:81/stub_test/old_content;jsessionid=F0D358CE192599DE7BF6AD271394D3BF  

JSP中使用JDBC连接MySQL数据库的详细步骤_JSP编程

1,首先在自己新建的项目文本框中输入Web Project的名称,然后单击下一步. 2,继续单击下一步 3,把Generate web.xml deployment descriptor复选框勾上. 4,单击Finish,完成Web project工程的创建. 5,打开MyEclipse Datebase Explore,如图所示 6,按图中所示填写各项内容,并通过Add JARS添加相应的数据库驱动程序. 7,通过Test Driver测试驱动是否连接成功,需要输入密码.成功后如下图所示 8,

jsp中实现带滚动条的table表格实例代码_JSP编程

如下所示: <div style="width:700px; height:225px; overflow:auto;"> <table border="1" width="100%" cellpadding="0" cellspacing="0"> <tr> <td width="3%">0</td> <td width

JSP中param标签用法实例分析_JSP编程

本文实例分析了JSP中param标签用法.分享给大家供大家参考,具体如下: Jsp中param标签的使用 <jsp:param>操作被用来以"名-值"对的形式为其他标签提供附加信息.它和<jsp:include>.<jsp:forward>.<jsp:plugin>一起使用,方法如下: 复制代码 代码如下: <jsp:param name="paramName" value="paramValue&qu

JSP中的倒数计时和自动跳转页面_JSP编程

老师说要写blog,然后只能把雪藏了多年没动过的博客重新翻出来了,今天先分享下JSP里的倒数计时和自动跳转页面 抓狂然后刚才好不容易码完,网页出错了. 1,在标签中建立onload事件,用作自动刷新: <body onload="shownum()"> 2,在<script>中编写onload事件: <script type="text/javascript"> var i = 6; function shownum(){ i=i

JSP中的PreparedStatement对象操作数据库的使用教程_JSP编程

PreparedStatement接口继承Statement,并与之在两方面有所不同: PreparedStatement 实例包含已编译的 SQL 语句.这就是使语句"准备好".包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数.IN参数的值在 SQL 语句创建时未被指定.相反的,该语句为每个 IN 参数保留一个问号("?")作为占位符.每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供. 由于 Pre

jsp、css中引入外部资源相对路径问题分析_JSP编程

在jsp页面中添加base,可用相对路径: 复制代码 代码如下: <%     String path = request.getContextPath();     String basePath = request.getScheme() + "://"             + request.getServerName() + ":" + request.getServerPort()             + path + "/&quo

JSP页面文件中base标记用法实例分析_JSP编程

本文实例分析了JSP页面文件中base标记用法.分享给大家供大家参考,具体如下: 我们在用IDE工具生成JSP页面时通常都包含下面的两段代码, <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %