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:
" οnerrοr="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 本身)中有这么一段用户访问的时候,就会导致网站 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 方式达成,这就导致黑客可以进行病毒式扩散,当然,仅仅是把 嵌入信息流也是有足够大杀伤力的 :)

解决方法:

给所有请求加上 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了。

你可能感兴趣的:(安全)