网站常见漏洞以及解决方案

转载声明:转载请注明本博客地址

1.1 跨站脚本(XSS)漏洞

漏洞描述

跨站脚本攻击(Cross Site Scripting, XSS)发生在客户端,可被用于进行窃取隐私、钓鱼欺骗、偷取密码、传播恶意代码等攻击行为。 恶意的攻击者将对客户端有危害的代码放到服务器上作为一个网页内容, 使得其他网站用户在观看此网页时,这些代码注入到了用户的浏览器中执行,使用户受到攻击。一般而言,利用跨站脚本攻击,攻击者可窃会话 Cookie 从而窃取网站用户的隐私。

漏洞危害

  • 钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目标网站重定向到钓鱼网站,或者注入钓鱼 JavaScript 以监控目标网站的表单输入。
  • 网站挂马:跨站时利用 IFrame 嵌入隐藏的恶意网站或者将被攻击者定向到恶意网站上,或者弹出恶意网站窗口等方式都可以进行挂马攻击。
  • 身份盗用:Cookie 是用户对于特定网站的身份验证标志,XSS 可以盗取到用户的 Cookie,从而利用该 Cookie 盗取用户对该网站的操作权限。如果一个网站管理员用户 Cookie 被窃取,将会对网站引发巨大的危害。
  • 盗取网站用户信息:当能够窃取到用户 Cookie 从而获取到用户身份时,攻击者可以获取到用户对网站的操作权限,从而查看用户隐私信息。
  • 垃圾信息发送:比如在 SNS 社区中,利用 XSS 漏洞借用被攻击者的身份发送大量的垃圾信息给特定的目标群。
  • 劫持用户 Web 行为:一些高级的 XSS 攻击甚至可以劫持用户的 Web 行为,监视用户的浏览历史,发送与接收的数据等等。
  • XSS 蠕虫:XSS 蠕虫可以用来打广告、刷流量、挂马、恶作剧、破坏网上数据、实施 DDoS 攻击等。

解决方案

  • 对参数做 html 转义过滤,要过滤的字符包括:单引号、双引号、大于号、小于号,& 符号,防止脚本执行。
  • 在变量输出时进行 HTML ENCODE 处理。

 

1.2 CSRF 漏洞

漏洞描述

跨站请求伪造(Cross-Site Request Forgery, CSRF),恶意网站通过脚本向当前用户浏览器打开的其它页面的 URL 发起恶意请求,由于同一浏览器进程下 Cookie 可见性,导致用户身份被盗用,完成恶意网站脚本中指定的操作。

漏洞危害

  • 信息泄露:如登录ID,隐私信息等。
  • 恶意操作:如加好友,加购物车,删除数据等。

解决方案

CSRF漏洞修复方案主要思路有两类:

  • 验证请求是信任页面发起,这类修复方案有:
    • 在表单中填充一次性随机的 csrf token 防止攻击者伪造 form 表单进行 CSRF。同时将此串 token 置入 session,在后端再进行一次一致性校验。
    • referer 验证。
  • 验证请求是合法用户发起,这类修复方案有:
    • 验证码
    • 密码验证
    • OTP 验证

1.3 HTTP Header 注入漏洞

漏洞描述

Web 程序代码中把用户提交的参数未做过滤就直接输出到 HTTP 响应头中,导致攻击者可以利用该漏洞来注入到 HTTP 响应头中实现攻击。

解决方案

  • 对参数做合法性校验以及长度限制,谨慎的根据用户所传入参数做 HTTP 响应的 Header 设置。
  • 在设置 HTTP 响应头时,过滤回车换行 %0d%0a、%0D%0A 字符。

1.4 目录遍历漏洞

漏洞描述

目录遍历是由于 Web 服务器或 Web 应用程序对用户输入文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过 HTTP 请求和利用一些特殊字符就可以绕过服务器的安全限制,访问任意受限的文件(可以是 Web 根目录以外的文件),甚至执行系统命令。

解决方案

  • 严格检查文件路径参数,限制在指定的范围。
  • 严格限制文件路径参数,不允许用户控制文件路径相关的参数,限定文件路径范围。

1.5 SQL 注入漏洞

漏洞描述
SQL 注入攻击(SQL Injection),被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。 在设计不良的程序当中,忽略了对输入字符串中夹带的 SQL 指令的检查,那么这些夹带进去的指令就会被数据库误认为是正常的 SQL 指令而运行,从而使数据库受到攻击,可能导致数据被窃取、更改、删除,以及进一步导致网站被嵌入恶意代码、被植入后门程序等危害。

漏洞危害

  • 机密数据被窃取
  • 核心业务数据被篡改
  • 网页被篡改
  • 数据库所在服务器被攻击变为傀儡主机,甚至企业网被入侵

解决方案

  • 所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中。
  • 对进入数据库的特殊字符 '"\<>&*; 等进行转义处理,或编码转换。
  • 确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为 int 型。
  • 数据长度应该严格规定,能在一定程度上防止比较长的 SQL 注入语句无法正确执行。
  • 网站每个数据层的编码统一,建议全部使用 UTF-8 编码,上下层编码不一致有可能导致一些过滤模型被绕过。
  • 严格限制网站所用数据库账号的权限,给此用户仅提供能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。
  • 避免网站显示 SQL 错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。

1.6 文件下载漏洞

漏洞描述

Web 应用程序在处理文件下载时,接受用户指定的路径和文件名进行下载,攻击者利用此漏洞来下载服务器的其它文件甚至任意文件(源代码、数据库甚至 passwd 等)。

解决方案

  • 限制可下载文件所在的目录为预期范围。
  • 通过指定文件编号的方式来定位待下载文件。

1.7 文件上传漏洞

漏洞描述

文件上传的 Web 程序未对文件类型和格式做合法性校验,导致攻击者可以上传 Webshell 或者非期望格式的文件。

解决方案

  • 对上传文件的大小和类型进行校验,定义上传文件类型白名单。
  • 保存上传文件的目录不提供直接访问。

免责声明:技术内容来源于支付宝开源社区,本人经整理筛选后发布

 

 

1. 背景 4 2. 编码安全 4 2.1. 输入验证 4 2.1.1. 概述 5 2.1.2. 白名单 5 2.1.3. 黑名单 5 2.1.4. 规范化 5 2.1.5. 净化 5 2.1.6. 合法性校验 6 2.1.7. 防范SQL注入 6 2.1.8. 文件校验 6 2.1.9. 访问控制 6 2.2. 输出验证 6 2.2.1. 概述 6 2.2.2. 编码场景 6 2.2.3. 净化场景 7 2.3. SQL注入 7 2.3.1. 概述 7 2.3.2. 参数化处理 7 2.3.3. 最小化授权 7 2.3.4. 敏感数据加密 7 2.3.5. 禁止错误回显 8 2.4. XSS跨站 8 2.4.1. 输入校验 8 2.4.2. 输出编码 8 2.5. XML注入 8 2.5.1. 输入校验 8 2.5.2. 输出编码 8 2.6. CSRF跨站请求伪造 8 2.6.1. Token使用 9 2.6.2. 二次验证 9 2.6.3. Referer验证 9 3. 逻辑安全 9 3.1. 身份验证 9 3.1.1. 概述 9 3.1.2. 提交凭证 9 3.1.3. 错误提示 9 3.1.4. 异常处理 10 3.1.5. 二次验证 10 3.1.6. 多因子验证 10 3.2. 短信验证 10 3.2.1. 验证码生成 10 3.2.2. 验证码限制 10 3.2.3. 安全提示 11 3.2.4. 凭证校验 11 3.3. 图灵测试 11 3.3.1. 验证码生成 11 3.3.2. 验证码使用 11 3.3.3. 验证码校验 11 3.4. 密码管理 12 3.4.1. 密码设置 12 3.4.2. 密码存储 12 3.4.3. 密码修改 12 3.4.4. 密码找回 12 3.4.5. 密码使用 12 3.5. 会话安全 13 3.5.1. 防止会话劫持 13 3.5.2. 会话标识符安全 13 3.5.3. Cookie安全设置 13 3.5.4. 防止CSRF攻击 13 3.5.5. 会话有效期 14 3.5.6. 会话注销 14 3.6. 访问控制 14 3.6.1. 跨权访问 14 3.6.2. 控制方法 14 3.6.3. 控制管理 14 3.6.4. 接口管理 15 3.6.5. 权限变更 15 3.7. 文件上传安全 15 3.7.1. 身份校验 15 3.7.2. 合法性校验 15 3.7.3. 存储环境设置 15 3.7.4. 隐藏文件路径 16 3.7.5. 文件访问设置 16 3.8. 接口安全 16 3.8.1. 网络限制 16 3.8.2. 身份认证 16 3.8.3. 完整性校验 16 3.8.4. 合法性校验 16 3.8.5. 可用性要求 17 3.8.6. 异常处理 17 4. 数据安全 17 4.1. 敏感信息 17 4.1.1. 敏感信息传输 17 4.1.2. 客户端保存 17 4.1.3. 服务端保存 17 4.1.4. 敏感信息维护 18 4.1.5. 敏感信息展示 18 4.2. 日志规范 18 4.2.1. 记录原则 18 4.2.2. 事件类型 18 4.2.3. 事件要求 18 4.2.4. 日志保护 19 4.3. 异常处理 19 4.3.1. 容错机制 19 4.3.2. 自定义错误信息 19 4.3.3. 隐藏用户信息 19 4.3.4. 隐藏系统信息 19 4.3.5. 异常状态恢复 20 4.3.6. 通信安全 20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值