前言

web 包含客户端和服务器,web 攻击对象一般指的是 web 服务器。针对 web 的攻击技术有很多,大致分为两类。
一类是主动攻击技术,由攻击者主动发出攻击,攻击者直接访问 web 应用,把攻击代码传入的攻击模式。
一类是被动攻击技术,攻击者通过预先设置好陷阱,陷阱里会嵌入式攻击代码,在用户中招后触发陷阱来发起攻击。

主动攻击模式

SQL 注入攻击

SQL 注入攻击指的是,在被需要拿去数据库查询的输入的页面传递 SQL 命令, web 服务器端执行并受到攻击的技术。例如网站的搜索输入框的值,在用户输入后会被拿去在数据库里条件查询。由于服务器并没有对查询字段做转义处理,用户输入的含有 SQL 命令的值被当作条件查询关键字直接拼接到 SQL 命令处执行。就会导致用户输入的 SQL 命令执行,从而引发数据泄露、数据损坏等危险。

OS 命令注入攻击

OS 命令注入攻击和 SQL 注入攻击类似,也是由于对输入信息没有进行正确的处理。导致用户在表单等输入的值需要拿到操作系统拼接 OS 命令执行时,由于用户输入了 OS 相关的恶意命令,被操作系统执行,从而引发操作系统的崩溃、文件丢失等危险。

如何预防 SQL 注入攻击和 OS 命令注入攻击

在了解了 SQL 注入攻击和 OS 命令注入攻击的原理之后,需要做的就是针对此攻击做防御。

  1. 对用户输入的值进行严格的验证和过滤,以确保只接受预期的数据类型和格式。
  2. 使用参数化查询工具或预编译语句,而不是直接将用户输入拼接到 SQL 查询或者系统命令中。
  3. 使用安全的数据库访问层攻击或框架,这些框架内置了防御机制。例如 ORM(对象关系映射)工具和参数化查询构建器可以自动处理用户输入的转义和验证。
  4. 最小权限:给应用程序进行访问权限控制。

    被动攻击模式

    XSS 跨站脚本攻击

    XSS(Cross-Site Scripting),即 跨站脚本攻击,是指攻击者在网页注入恶意脚本,使其在用户浏览器上执行,从而获取用户的敏感信息或进行其他恶意操作。这些注入的脚本通常是 javascript 代码。
    例如一个社交媒体网站,用户可以添加评论。由于该网站对评论没有正确地校验和处理。攻击者在评论中注入恶意脚本,比如获取 cookie 发送到攻击者的网站等。当其他用户浏览包含恶意代码的网页时,攻击脚本就会被执行。可能导致用户 cookie 被盗或者被重定向到恶意网站或篡改页面内容。
    XSS 简单描述就是 A 网站上有攻击脚本,攻击脚本被执行,向攻击者服务器发送盗取的用户信息。再利用盗取的信息登录 A 网站进行攻击。
    防御策略

  5. cookie 设置为 http-only 只读状态。

  6. 对输入做校验。

    CSRF 跨站请求伪造攻击

    CSRF(Cross-Site Request Forgeries),即跨站请求伪造攻击,是指利用用户已经登录的身份,通过伪造请求来执行未授权的操作。
    例如用户登录了一个银行网站,在没有退出登录的情况下,在同一时间访问了另外一个含有攻击请求脚本的论坛网站,攻击请求脚本内容指向银行网站上转账操作的请求,由于用户已经在银行网站上登录,该请求会被认为是合法的并成功执行。
    CSRF 和 XSS 不同之处是 CSRF 并不是盗取信息,而是直接利用用户已登录的状态进行跨域请求伪造。
    CSRF 一般发生在打开一个受信任网站A,被诱导同时打开另一个钓鱼网站B,钓鱼网站的代码自动执行,执行的内容是向 A 网站发起请求,这里发起的请求是以 img 或者 script 标签等绕过跨域限制的方式,浏览器就会带上 A 网站的 cookie 。此时服务器就分不清是 A 网站发起的还是别的网站发起的。
    防御策略

  7. 不使用 cookie 作为身份认证,使用自定义 token 随机令牌。在用户每次请求都要求带上 token。这样钓鱼网站就不能拿到 token ,也就无法发起 CSRF 攻击。

  8. 检查 Referer 头信息,校验请求头里的发起源是否是合法的源。

    参考和推荐

    https://segmentfault.com/a/1190000016551188
    https://tech.meituan.com/2018/10/11/fe-security-csrf.html
    https://zhuanlan.zhihu.com/p/342603075