常见 Web 安全相关问题

参考:

常见六大 Web 安全攻防解析

常见 Web 安全攻防总结

Web安全知多少

XSS

cross-site script.跨站脚本,XSS。

浏览器端运行非法的 HTMl 或 script 标签进行的一种攻击。

可能造成的影响:

  • 利用虚假输入表单骗取用户个人信息
  • 利用脚本窃取用户的 Cookie 值,帮助攻击者发起恶意请求
  • 显示伪造的文章或图片

原理:恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的

分类:

  1. 非持久性XSS。通过发送恶意脚本代码参数的URL,URL地址被打开的时候,特有的恶意代码参数被解析执行

    特点:

    • 不经过服务器存储,直接通过Http的get或者post就能发起
    • 需要诱骗点击之后发生
    • 可以通过document.cookie等方式获取到敏感信息

    防止:

    • Web渲染的所有内容和数据都必须来自服务端

    • 不要从URLdocument.referrer,document.forms等DOMAPI直接获取数据渲染。

    • 不要使用evaldocument.write(),innerHTML,document.createElement()等可执行字符串的方式

    • 对字段做encodeURI 处理

      转义的目的是将一些构成 HTML 标签的元素转义,比如 <>空格 等,转义成 <> 等显示转义字符

  2. 持久性XSS(存储性XSS)

    一般用于表单提交的功能,利用XSS将代码内容注入数据库持久存储,前端页面获得从数据库中读出的注入代码时,将其渲染执行。

    需要条件:

    • post请求提交表单后段没有转义直接入库,返回时也没做转义
    • 前端获取到数据没做转义直接渲染成DOM

    特点:

    • 持久性,植入在数据库中
    • 盗取信息,危害面广

XSS 防御

  1. Content-Security-Policy 。通过配置规则,明确告诉浏览器哪些外部资源可以加载和执行。(CSP)

    Content-Security-Policy

    • 设置 HTTP Header 中的 Content-Security-Policy
    • 设置 meta 标签的方式

    例子:

    • 只允许加载本站资源:Content-Security-Policy: default-src 'self'
    • 只允许加载 HTTPS 协议图片:Content-Security-Policy: img-src https://*
    • 允许加载任何来源:Content-Security-Policy: child-src 'none'
  2. 转义字符。对于输入输出的内容进行转义,引号,尖括号斜杠这些。何内容写到页面之前都必须加以encode,避免把 html tag 弄出来。

  3. HttpOnly Cookie,预防XSS攻击窃取用户cookie最有效的防御手段。设置了 HttpOnly 属性的 cookie 不能使用 JavaScript 经由 Document.cookie 属性、XMLHttpRequestRequest APIs 进行访问。


CSRF

Cross site Request Forgery,跨站请求伪造。利用用户已登录的身份,在用户不知情的情况下,以用户名义完成非法操作

完成CSRF攻击需要的条件:

  • 用户登录A站点,在本地记录了cookie
  • 没有登出A站点,即Cookie生效的情况下,访问了恶意攻击提供的危险站点B(B要求访问A)
  • 站点A没有做CSRF防御

CSRF 防御

  1. sameSite,对Cookie设置sameSite属性,表示Cookie不随着跨域请求发送,可以减少CSRF攻击。(该属性不兼容所有浏览器)
  2. Referer Check,Referer信息告诉服务器是从哪个页面链接过来的,通过检查http包头referer的值是不是这个页面,来判断是不是CSRF攻击
  3. Anti-SCRF-Token。请求时在HTTP 请求中以参数的形式加入一个随机产生的token,服务器建立一个拦截器来验证这个token,会进行校验该请求当中的token和cookie当中的token值是否都存在且相等,才认为这是合法的请求。
  4. 验证码。核心步骤增加验证码,增加验证码实际上就是添加了一个请求参数。
  5. 对Cookie设置HttpOnly

SQL 注入

就是通过把 SQL 命令插入到 Web 表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令

例如,我们之前预想的SQL 语句是:

SELECT * FROM user WHERE username='admin' AND psw='password'

然后,恶意攻击者输入的用户名是 admin' --

结果 SQL 语句变成了如下形式:

SELECT * FROM user WHERE username='admin' --' AND psw='xxxx'

在 SQL 中,' --是闭合和注释的意思,-- 是注释后面的内容的意思,所以查询语句就变成了:

SELECT * FROM user WHERE username='admin'

然后密码随意输入都可以,就可以登入系统了,这就是一个SQL注入

包含以下过程:

  • 获取用户请求参数
  • 拼接到代码当中
  • SQL语句按照我们构造参数的语义执行成功

SQL 注入的本质是数据和代码未分离,数据当作代码来执行。

危害:

  • 获取数据库信息
  • 获取服务器权限,读取敏感文件

SQL注入防御

  • 严格控制Web应用的数据库操作权限
  • 后端代码检查输入的数据是否符合预期
  • 对进入数据库的特殊字符转义
  • 不要使用拼接SQL语句,使用数据库提供的参数化查询接口

点击劫持

本质上是一种视觉欺骗。将需要攻击的网站内嵌到自己的网页中,将iframe设置为透明,再透出一个按钮诱导点击。

特点:

  • 隐蔽性高,骗取用户操作
  • UI-覆盖

原理:登录A网站后,被诱导打开第三方的网站,第三方的网站通过 iframe 引入了A网站页面的内容,在第三方的网站点击某个按钮,实际上触发的是A网站的按钮。

例如:在已经登录的网站,诱导点击某按钮,可能实际上就是关注了某人。

点击劫持防御

  1. X-FRAME-OPTIONS。是一个HTTP响应头,可以设置不同的值防御 iframe 的嵌套劫持点击。

    • DENY 页面不允许通过 iframe 的方式现实
    • SAMEORIGIN,页面可以在相同域名下通过 iframe 显示。
    • ALLOW-FAROM,页面可以在任意来源的 iframe 中显示。
  2. JS 手动防御,当通过 iframe 的方式加载页面的时候,直接不显示任何内容。(window.self)

    if (self != top) { 
      alert('在iframe中');
    }
    

<hr/ >

URL 跳转漏洞

借助未验证的URL跳转,将应用引导到不安全的第三方区域,导致的安全问题。

其原理是构建恶意链接(链接需要进行伪装,尽可能迷惑),发在QQ群或者是浏览量多的贴吧/论坛中。安全意识低的用户点击后,经过服务器或者浏览器解析后,跳到恶意的网站中

如:

http://gate.baidu.com/index?act=go&url=http://t.cn/RVTatrd
http://qt.qq.com/safecheck.html?flag=1&url=http://t.cn/RVTatrd

实现方式:

  • Header头跳转
  • JavaScript跳转
  • META标签跳转

URL跳转漏洞防御

  • Referer,确定URL参数进入的来源,避免用户自己生成跳转链接
  • 验证Token。在生成的链接里加入用户不可控的Token对生成的链接进行校验

OS命令注入攻击

SQL注入是针对数据库的,而OS命令注入则是针对操作系统的。OS命令通过Web应用,执行非法的操作系统命令达到攻击的目的。

命令注入可以向shell发送命令,让Windows或者Linux系统的命令行启动程序。通过命令注入可执行系统上安装的各种程序。

例子:

// 以 Node.js 为例,假如在接口中需要从 github 下载用户指定的 repo
const exec = require('mz/child_process').exec;
let params = {/* 用户输入的参数 */};
exec(`git clone ${params.repo} /some/path`);

如果 params.repo 传入的是 https://github.com/admin/admin.github.io.git 确实能从指定的 git repo 上下载到想要的代码。
但是如果 params.repo 传入的是 https://github.com/xx/xx.git && rm -rf /* && 恰好你的服务是用 root 权限起的就糟糕了。

OS命令注入防御

  • 对前端提交内容规则限制
  • 调用系统命令前对传入参数进行命令行参数转义过滤
  • 不要直接拼接命令语句,借助工具做拼接和转移预处理

<hr/ >

扩展:DDoS

Distributed Denial of Service,分布式拒绝服务。利用大量的请求造成资源过载,导致服务不可用。

其原理都是造成资源过载,导致服务不可用

网络层DDoS和应用层DDos

详情:DDoS

原文地址:https://www.cnblogs.com/xuxiaowei/p/14616400.html