web安全 XSS、CSRF 漏洞、SQL 注入漏洞,跳转漏洞

  1. XSS
    用户浏览器在浏览被攻击的网站时执行了网页上的特定脚本;
Case A: HTML DOM
<a href="/user/1">{{ user_name }}</a>
Exploit: 
<script>alert(1)</script>
Result:
<a href="/user/1"><script>alert(1)</script></a>


Case B: HTML Attribute
<img src="{{ image_url }}">
Exploit:
" onerror="alert(1)
Result:
<img src="" onerror="alert(1)">


Case C: JavaScript
<script>var user_data = {{ user_data|json_encode }};</script>
Exploit:
{"exploit": "</script><script>alert(1);//"}
Result:
<script>var user_data = {"exploit": "</script><script>alert(1);//"};</script>

解决方法:
禁止在HTML页面中引入非确认安全的资源文件,包括Script、Stylesheet、图片、字体、Flash等;HTML页面动态输出JSON必须对其中的字符串值做 XSS防御 处理,通过对输入的值进行转义(escapeHtml)或者根据实际情况过滤。结合框架使用请自行根据框架google。
2.CSRF 漏洞
CSRF (Cross-site request forgery) 顾名思义就是由于a站的漏洞,使你在a站的操作影响到了你的b站的信息。
举个栗子,如果你网站 A 上的「登出」功能是这样实现的:

<a href="http://a.com/logout.php">登出</a>

则存在 CSRF 漏洞。假设网站 B(当然也可以是网站 A 本身)中有这么一段<img src="http://a.com/logout.php">用户访问的时候,就会导致网站 A 上的会话被登出。

需要注意的是,不只是 GET 类请求,POST 类请求同样会存在 CSRF 漏洞,例如网站 B 中:

<form action="http://a.com/transaction" method="POST" id="hack">
   <input type="hidden" name="to" value="hacker_account">
   <input type="hidden" name="value" value="100000">
</form>
<script>document.getElementById("hack").submit();</script>

那么用户访问网站 B 的时候,便会自动携带 A 的 SESSION 信息,成功 POST /transaction 到网站 A。

这个漏洞危害很大,例如以前某些 BTC 交易所就存在这个漏洞,一旦用户被诱骗访问了黑客精心布置的网站就会造成资金损失;又例如,以前某中国著名社交网站也存在这个漏洞,更糟糕的是该网站还允许用户递交自己的 显示在所有人的信息流中,且某些传播性操作可以用 GET 方式达成,这就导致黑客可以进行病毒式扩散,当然,仅仅是把 <img src="logout.do"> 嵌入信息流也是有足够大杀伤力的 :)

解决方法:

给所有请求加上 token 检查。token 一般是随机字符串,只需确保其不可预测性即可。token 可以在 QueryString、POST body 甚至是 Custom Header 里,但千万不能在 Cookies 里。

检查 referer (请注意,这往往不能防御来自网站自身的 CSRF 攻击,如用户评论中的 就是一个常见触发点)
token的使用可以用nosql存储,并设置有效期。
3.SQL注入
mybatis的#和$符的区别一定要搞清楚,sql注入是非常危险的。
举个例子:

String sql= SELECT * FROM USERS WHERE UserName="'+${params}+'";
如果params=";DROP TABLE USERS;";
结果可想而知。

解决方案:所有 SQL 语句都使用参数化查询。
总结:web安全非常重要,特别是在面向大众用户的web系统中,如果出现web漏洞,轻则影响声誉,重则如果你的营销的手段(如机器人,开奖黑幕,概率造假,等等)如果这些被公之于众的话。那基本上可以gg了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值