java csrf
- IT科技
- 关注:7.17K次
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java csrf是什么,让我们一起了解一下:
csrf是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。
实战操作:假设bbs系统以HTTP GET请求方式来删除帖子,攻击者在恶意网站加入以下HTML代码段。
<img src="http://www.mybbs.com/del_forum_posts.do?id=1234"/>
CSRF攻击者在MW中嵌入上述<img>标签,一旦用户访问该网站将导致帖子被删除,显然用户没想过要删除帖子。那有人会问了,既然HTTP GET方式会导致帖子会被删除,那么我改用POST方式不就可以了。
为解决上面的问题,bbs程序员将删除帖子的方式改用POST表单提交方式。
<form action="del_forum_posts.do" mehtod="post"> <input name="id" value="1234"/> <input type="submit" value="submit"/></form>
实际上前端页面改用POST方式还是会存在两个问题,一是java后端程序员如果编写Servlet或者SpringMVC控制器中时没有很好地区分出POST与GET请求时,那么以request.getAttribute()或者request.getParameter()方式获取客户单请求参数,那么还是无法判断出请求是来自POST还是GET的。
假设不存在第一个问题,那是不是真的就不存在问题了呢。其实你在页面改用POST请求,那么攻击者在恶意页面中也可以改用POST方式,正所谓以其人之道还治其人之身。如下代码示例:
<script language="JavaScript" type="text/javascript"> function autoSubmit() { document.forms['myForm'].submit(); }</script> <body οnlοad="autoSubmit()"> <form id="myForm" name="myForm" action="del_forum_posts.do" mehtod="post"> <input name="id" value="1234"/> </form></body>
显然,一旦访问该页面还是会遭受攻击,因此改用POST方式来防御CSRF是治标不治本。
最后,我们要正确使用java csrf,来解决正当的问题,来维护网络安全。
- 文章版权属于文章作者所有,转载请注明 https://dongkepu.com/itkeji/4mrd7e.html