第2章:常见数据安全威胁 —— 从原理看懂攻击者的套路
说到数据安全的威胁,你想想看,是不是每次听到SQL注入、XSS这些词,都觉得有点虚?
我刚开始做安全运营那会儿也是这样。看报告上一堆缩写,好像很厉害的样子。但后来我发现,其实不用慌。这些攻击说白了,就是攻击者利用了我们日常开发中一些“没想到”的漏洞。
这一章,我就带你把最常见的几种威胁捋一遍。我会把它们的原理、攻击套路和怎么防,用最直白的方式讲清楚。
2.1 你绕不开的SQL注入
SQL注入,行业内称为“老大哥级”漏洞。我见过不少新手觉得它“太经典了,应该没人用了”。实际上呢?OWASP Top 10里它常年榜上有名。
原理一句话:攻击者在输入框里塞入恶意的SQL命令,欺骗数据库执行。
核心原因:开发者直接拼接用户输入到SQL语句中,没有做任何过滤或参数化处理。
我给你举个例子:
// 漏洞代码
String sql = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";
// 正常输入: admin / 123456
// 恶意输入: username = ' OR 1=1 -- 密码随便
// 最终SQL: SELECT * FROM users WHERE username = '' OR 1=1 -- ' AND password = 'xxx'
// -- 注释了后半部分,1=1永远为真,绕过认证。
我在一个项目中见过更狠的:攻击者直接通过注入拿到了整个数据库的用户表。最恐怖的是,我们的日志系统居然没发现异常,因为他是通过正常WEB端口进来的。
避坑提醒:你以为只有表单才可能被注入?还记得URL参数、Cookie吗?所有能从客户端带往服务端的“口子”,都可能被利用。我见过有人用HTTP头注入的案例,那才叫防不胜防。
2.2 XSS:不只是弹个框那么简单
很多人对XSS的理解停留在“alert(1)”。其实,XSS能做的事情太多了。
它本质上是一种脚本注入。攻击者把恶意JavaScript代码“存”到你的页面里,等用户一浏览就执行。说白了,就是浏览器替攻击者执行了代码。
XSS分三类:
- 反射型:恶意代码通过URL参数传入,服务端直接返回给浏览器。比如你点了个链接:
https://xxx.com/search?q=<script>alert('xss')</script>,如果页面直接输出q参数,就会执行脚本。 - 存储型:恶意代码被存到了服务器数据库中。比如在评论区写入脚本,访问该页面的所有人都会中招。这个杀伤力最大。
- DOM型:纯前端问题。JavaScript直接操作URL或者页面的DOM对象,从而执行恶意代码。
我当初做安全工具时,最简单有效的办法就是对所有用户输入做HTML实体编码。你想想看,<script>变成<script>,浏览器就不会执行了。
2.3 CSRF:用你的身份干坏事
CSRF(跨站请求伪造),这个攻击设计得挺巧妙的。攻击者伪造一个请求,骗你的浏览器去执行。
举个例子:你登录了银行网站A,然后访问了一个恶意网站B。网站B上有个图片链接,地址是银行的转账接口。你浏览器加载图片时,就自动发起了一个转账请求。
为什么会成功?因为你登录了银行网站,浏览器会自动携带你的Cookie。银行服务器一看Cookie有效,就以为是你在操作。实际上你根本不知道。
| 对比项 | XSS | CSRF |
|---|---|---|
| 利用方式 | 利用用户对网站的信任 | 利用网站对浏览器的信任 |
| 载体 | 恶意脚本 | 伪造请求(GET/POST) |
| 目标 | 窃取信息、篡改页面 | 执行操作(转账、改密码) |
| 防御思路 | 对输出编码、CSP(内容安全策略) | CSRF 、SameSite Cookie |
我的经验:防御CSRF的黄金法则是:关键操作必须二次验证。加一个,不用麻烦的验证码也行,但一定要是随机的、与服务端绑定的。我曾经接手过一个项目,所有POST请求都没有,那简直是“开门揖盗”。
2.4 SSRF:内网是你的后花园
SSRF(服务端请求伪造),说白了就是让服务器替攻击者去访问内网资源。很多团队以为防火墙一关就万事大吉了,其实不然。SSRF直接绕过了防火墙。
攻击者通过构造一个URL,比如 http://127.0.0.1:8080/admin,提交给应用。如果应用不加限制,就会自动请求这个内网地址。结果是什么?攻击者可能通过“跳板机”看到你内部的管理面板。
我记得有一次搞安全演练,我们就用SSRF绕过了客户的WAF(Web应用防火墙),直接打到对方阿里云RDS的3306端口。因为应用本身有权限访问数据库,而我们只是让应用去访问它自己。
特别注意:SSRF不仅仅是HTTP请求。像Gopher、SSH、Redis这些协议都可能被利用。原则就是:严格限制应用发出的请求目的IP地址、端口和协议。白名单是唯一安全的方式。我见过不少团队只做了IP黑名单,结果被127.1绕过了。
2.5 这四种威胁的共同点
你发现规律了吗?这些攻击都有一个共性:对用户输入或外部数据的信任过度。
SQL注入是信任了输入拼接到SQL。XSS是信任了输入原样输出到页面。CSRF是信任了请求来自合法的会话。SSRF是信任了服务器发出的请求是安全的。
所以,安全运营的本质是什么?我个人觉得,就是不断地问自己:“这里数据是哪里来的?我能信任它吗?”
我每天的例行工作里,会专门花15分钟检查当日新上的接口。看看哪些地方直接拼接了用户输入,哪些地方没有设。用这种“找茬”的心态去跑一遍,基本就能堵住八成以上的坑。
好了,这四种最常见的威胁,我们就聊到这儿。你想想看,是不是觉得它们也没有那么玄乎了?其实就是攻击者在利用我们的一些“小疏忽”。