至高吴上(Alfa.wu)

一个人,一生,能坚持做好一件事情是多么的牛XX啊!!!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

不是所有 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

Exploit:

" onerror="alert(1)
Result:

这个例子表明,如果只对尖括号进行 escape 是不够的,很多时候引号也需要被 escape。简单来说,对不同输出场景,需要使用不同的 escape 规则。

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 代码:

posted on 2016-09-26 17:00  Alfa  阅读(272)  评论(0编辑  收藏  举报