跨站脚本攻击,xss,一个简单的例子让你知道什么是xss攻击
https://www.cnblogs.com/dolphinX/p/3391351.html
这篇文章说的很清楚:
---总结
1、通过在前端输入js代码,即<script>代码,点击提交,comment字段保存到数据库中。
2、当被提交的这段js代码,再次出现在页面上时(如之前是saveModify操作,将comment字段保存到数据库中,然后执行viewModify,显示comment信息,这段<script>代码就显示在了html页面中,这段scrip代码就被执行了),这段script代码被执行。
3、该js代码是第三方黑客的js
5、js会调用黑客的工程(即发起一个http url请求),将用户名和密码发送过去。
这样,用户名和密码就泄露了。
但是有个问题,造成用户密码泄露的核心,是页面上提交了某段恶意的<script>代码,但是黑客怎么会在用户的浏览器上提交这段<script>代码呢?用户肯定不会让黑客使用自己的浏览器吧?
我想到了一种场景,让用户自己去提交这段恶意的<script>代码。
场景如下:
1用户已经正常登录了上图中的论坛系统
2黑客提供给用户一个链接(可能是一个匿名邮件里的链接,这个链接被伪装了,看上去很合法),如下图中的参加,不参加,其实就是一个被伪装的链接,点击该链接就会在该论坛提交恶意script代码(这个方式由很多种,其实就是向论坛发起一个http
url请求,即将表单信息进行提交,表单中就有script代码)。
3用户点击链接,恶意的<script>代码代码被提交,用户中招。
就这么简单。
====-=说一下我碰到过的一个xss跨站脚本攻击场景,实际工程应用中碰到过的。
我有一个登录页面:
如果我有用户abc,密码123
输入用户名abc,密码567,提示密码错误,但是为了避免用户再次输入用户名,将输入的用户名在页面上保留。此时的html页面是这样的,f12查看:
好,场景描述完毕,xss跨站脚本开始了:
1、如果我直接在用户名这里输入<script>alert("1")</script>,然后输入一个错误的密码,并没有执行script代码,因为返回的html页面是这样的:
上图中那样的script代码是不会执行的,因为在input的value中。只有独立的形如下的script代码才会执行。
2所以要想实现script代码的执行,就需要进行拼接,将script代码排到input标签外。
怎么实现呢?
说白了就是自己拼接,将input标签进行闭合,然后将script代码缀在后边。
通过用户名的输入,将input拼接成如下,即可实现script代码的执行:
<input name="userName" class="textcss" id="userName" type="text" value="
abc"/><script>alert("1")</script>"/>
为什么会执行?
可以将拼接后的input拆分看一下,就很明白了
<input name="userName" class="textcss" id="userName" type="text" value="abc"/>
<script>alert("1")</script>
"/>
因为input已经闭合了,所以script代码会执行,至于拼接后的html文件是有语法错误的问题(因为最后剩下一个"/>,
这个html是有错误的,但是不影响页面展示和script代码执行)就可以忽略了。
因此,只需要在用户名那里输入:
abc"/><script>alert("1")</script>
,然后输入一个错误的密码,点击登录,就会执行script代码,弹出弹框。
===怎么解决呢?
网上的方式,感觉可行。
因为我之前工程中碰到过一种解决方式,是jfinal工程中实现的,在继承JFinalConfig的子类中进行实现,和这个方式很像。
先说网上的这种方式:
https://blog.csdn.net/sdauzyh/article/details/74942737
再说jfinal方式实现:
推荐后者,即final方式解决xss攻击。
热门工具 换一换