不是所有 Web 开发者都有安全的概念,甚至可能某些安全漏洞从来都没听说过。这就是这篇科普文章的存在意义,希望 Web 开发者在开发时能依此逐条检查代码中的安全问题。
注:服务器运维相关的安全注意事项不在本文之列
这篇文章主要包含以下内容:
前端安全
XSS 漏洞
CSRF 漏洞
后端安全
SQL 注入漏洞
权限控制漏洞
SESSION 与 COOKIE
IP 地址
验证码
前言
水桶底部只要有一个洞,水就能全部流光。Web 安全同理。
前端安全
前端安全主要表现为通过浏览器间接影响到用户数据的安全问题。
XSS 漏洞
XSS (Cross-Site Scripting),是一个我觉得耳熟能详的前端安全问题。通过构造特殊数据,在用户浏览器上执行特定脚本,从而造成危害(如以用户身份发帖、转账等)。
由于页面内 JavaScript 几乎可以完成各种事情,因此一旦网站上有 XSS 漏洞,那些没有验证码等确认措施的操作大多都能不知情地完成,其危害甚大。
来看看几个存在 XSS 漏洞的例子吧:
Case A: HTML DOM
{{ user_name }}
Exploit:
Result:
最基本的例子,如果此处不对 user_name 中的特殊符号进行 escape,就会造成 XSS。
Case B: HTML Attribute
" onerror="alert(1)
Result:
Case C: JavaScript
Exploit:
{"exploit": "
这是一个特别的例子,大多数人觉得,对于输出在 那么用户访问网站 B 的时候,便会自动携带 A 的 SESSION 信息,成功 POST /transaction 到网站 A。
这个漏洞危害很大,例如以前某些 BTC 交易所就存在这个漏洞,一旦用户被诱骗访问了黑客精心布置的网站就会造成资金损失;又例如,以前某中国著名社交网站也存在这个漏洞,更糟糕的是该网站还允许用户递交自己的 显示在所有人的信息流中,且某些传播性操作可以用 GET 方式达成,这就导致黑客可以进行病毒式扩散,当然,仅仅是把
嵌入信息流也是有足够大杀伤力的 😃
解决方法:
给所有请求加上 token 检查。token 一般是随机字符串,只需确保其不可预测性即可。token 可以在 QueryString、POST body 甚至是 Custom Header 里,但千万不能在 Cookies 里。
检查 referer (请注意,这往往不能防御来自网站自身的 CSRF 攻击,如用户评论中的 就是一个常见触发点)
后端安全
在这里,后端安全指的是对服务器数据等可能造成直接影响的安全问题。黑客一般会直接构造数据进行攻击。
SQL 注入漏洞
SQL 注入漏洞应该也是一个大多数开发者都知道的漏洞。
考察以下 PHP 代码:
浙公网安备 33010602011771号