前言
web 包含客户端和服务器,web 攻击对象一般指的是 web 服务器。针对 web 的攻击技术有很多,大致分为两类。
一类是主动攻击技术,由攻击者主动发出攻击,攻击者直接访问 web 应用,把攻击代码传入的攻击模式。
一类是被动攻击技术,攻击者通过预先设置好陷阱,陷阱里会嵌入式攻击代码,在用户中招后触发陷阱来发起攻击。
主动攻击模式
SQL 注入攻击
SQL 注入攻击指的是,在被需要拿去数据库查询的输入的页面传递 SQL 命令, web 服务器端执行并受到攻击的技术。例如网站的搜索输入框的值,在用户输入后会被拿去在数据库里条件查询。由于服务器并没有对查询字段做转义处理,用户输入的含有 SQL 命令的值被当作条件查询关键字直接拼接到 SQL 命令处执行。就会导致用户输入的 SQL 命令执行,从而引发数据泄露、数据损坏等危险。
OS 命令注入攻击
OS 命令注入攻击和 SQL 注入攻击类似,也是由于对输入信息没有进行正确的处理。导致用户在表单等输入的值需要拿到操作系统拼接 OS 命令执行时,由于用户输入了 OS 相关的恶意命令,被操作系统执行,从而引发操作系统的崩溃、文件丢失等危险。
如何预防 SQL 注入攻击和 OS 命令注入攻击
在了解了 SQL 注入攻击和 OS 命令注入攻击的原理之后,需要做的就是针对此攻击做防御。
- 对用户输入的值进行严格的验证和过滤,以确保只接受预期的数据类型和格式。
- 使用参数化查询工具或预编译语句,而不是直接将用户输入拼接到 SQL 查询或者系统命令中。
- 使用安全的数据库访问层攻击或框架,这些框架内置了防御机制。例如 ORM(对象关系映射)工具和参数化查询构建器可以自动处理用户输入的转义和验证。
-
被动攻击模式
XSS 跨站脚本攻击
XSS(Cross-Site Scripting),即 跨站脚本攻击,是指攻击者在网页注入恶意脚本,使其在用户浏览器上执行,从而获取用户的敏感信息或进行其他恶意操作。这些注入的脚本通常是 javascript 代码。
例如一个社交媒体网站,用户可以添加评论。由于该网站对评论没有正确地校验和处理。攻击者在评论中注入恶意脚本,比如获取 cookie 发送到攻击者的网站等。当其他用户浏览包含恶意代码的网页时,攻击脚本就会被执行。可能导致用户 cookie 被盗或者被重定向到恶意网站或篡改页面内容。
XSS 简单描述就是 A 网站上有攻击脚本,攻击脚本被执行,向攻击者服务器发送盗取的用户信息。再利用盗取的信息登录 A 网站进行攻击。
防御策略: cookie 设置为 http-only 只读状态。
-
CSRF 跨站请求伪造攻击
CSRF(Cross-Site Request Forgeries),即跨站请求伪造攻击,是指利用用户已经登录的身份,通过伪造请求来执行未授权的操作。
例如用户登录了一个银行网站,在没有退出登录的情况下,在同一时间访问了另外一个含有攻击请求脚本的论坛网站,攻击请求脚本内容指向银行网站上转账操作的请求,由于用户已经在银行网站上登录,该请求会被认为是合法的并成功执行。
CSRF 和 XSS 不同之处是 CSRF 并不是盗取信息,而是直接利用用户已登录的状态进行跨域请求伪造。
CSRF 一般发生在打开一个受信任网站A,被诱导同时打开另一个钓鱼网站B,钓鱼网站的代码自动执行,执行的内容是向 A 网站发起请求,这里发起的请求是以 img 或者 script 标签等绕过跨域限制的方式,浏览器就会带上 A 网站的 cookie 。此时服务器就分不清是 A 网站发起的还是别的网站发起的。
防御策略: 不使用 cookie 作为身份认证,使用自定义 token 随机令牌。在用户每次请求都要求带上 token。这样钓鱼网站就不能拿到 token ,也就无法发起 CSRF 攻击。
- 检查 Referer 头信息,校验请求头里的发起源是否是合法的源。
参考和推荐
https://segmentfault.com/a/1190000016551188
https://tech.meituan.com/2018/10/11/fe-security-csrf.html
https://zhuanlan.zhihu.com/p/342603075