常见Web安全漏洞及防范

分享三种常见的安全漏洞

输入输出验证不充分

常见Web安全漏洞及防范_第1张图片

SQL注入

定义

SQL注入是SQL语句插入到传入参数的攻击,之后再将这些参数传递给SQL服务器加以解析并执行。

成因

代码中有拼接的SQL或HQL语句

危害
  • 拖库:导致数据丢失、数据窃取、数据破坏或拒绝服务
  • 提权:完全接管操作系统
防范

思路:预处理和参数化查询

  • 预处理和参数化查询PreparedStatement

使用相关的框架如Struts、Hibernate、Ibatis等

  • 执行严格的输入验证

使用正规表达式,严格检查输入的类型、长度和内容

跨站脚本攻击(XSS)

定义

跨站脚本攻击(XSS)通常是指攻击者利用网站程序对传入参数值过滤不足,输入可以显示在页面上对其他用户造成影响的HTML、JS恶意代码。

成因
  • 传入值验证不严格、用户能够控制传入值
  • 未经处理直接输出到客户端网页中
危害

劫持用户会话、插入恶意内容、重定向用户、使用恶意软件劫持用户浏览器等。

防范

思路:数据在输出时转义编码处理

  • 输出编码(输出至客户端前进行编码)

输入验证或过滤(客户端及服务器端双向验证)

  • 严格输入验证:对用户输入的数据类型、大小、范围的验证,可避免输入危害的字符和冗余数据
  • 黑名单过滤

恶意文件上传

定义

恶意文件上传是指攻击者通过修改上传功能程序的参数内容,从而达到上传恶意文件的目的

成因

未对上传文件类型和格式做合法性校验,导致攻击者可以上传WebShell恶意文件(.asp,.war,.php,.jsp等)

危害

可以获取Web服务器的控制权

防范

思路:上传文件进行白名单过滤(只允许需要的)

  • 文件类型、大小检查
  • 下载时直接文件名引用

上传的文件以二进制形式下载,不提供直接访问

  • 上传目录禁止执行及独立保存位置

指定上传文件目录(此路径应该在Web服务器限制为只读,禁止执行),文件存储到独立的文件服务器或数据库中。

  • 随机改写文件名和文件路径,使不可猜测

逻辑设计缺陷

常见Web安全漏洞及防范_第2张图片

业务逻辑漏洞

定义

业务逻辑漏洞是由于业务逻辑设计或流程设计不完整、不合理导致的业务相关的缺陷。

成因

业务逻辑漏洞是由于业务逻辑设计或流程设计不完整、不合理,客户端可以控制输入数据和流程、检查点

危害
  • 信息泄露、越权访问、账号窃取等
  • 一般是全局问题,可能比常规的安全漏洞更加严重
实例
  1. 资源耗尽

短信、邮件等如果没有限制发送次数就会产生拒绝服务攻击

  1. 注册送优惠券

手机用户注册可送优惠券,未限制每个手机次数

  1. 任意重置密码

密码找回的凭证太弱,如只需填入一个四位或者六位的纯数字就可以重置密码,导致可以暴力破解;

用户找回密码的邮箱或者手机号码被修改

  1. 绕过验证码

12306输入完验证码提交订单时必须要等待4.8秒,可绕过验证码

  1. 任意邮箱绑定

任意邮箱绑定账号(结合CSRF),验证码链接直接登陆。

防范

思路:业务流程需要有必要的控制参数,同时避免控制参数被绕过。

  • 防止绕过流程节点和检查参考(如token等)
  • 不需要用户操作或访问的数据避免发送到客户端(如验证码发送给客户端)
  • 验证所有输入(数字的边界、正负值等)
  • 防范资源消耗攻击(如短信等)、拒绝服务攻击(大规模数据查询,如搜索通配符)等

失效的身份认证

定义

身份认证功能存在设计缺陷或功能薄弱,这就导致攻击者绕过认证,窃取密码、密钥、会话令牌或利用实施漏洞冒充其他用户身份

成因

身份认证方式薄弱,如弱密码、无验证码等

逻辑设计缺陷导致可以重置任意用户密码

危害

绕过认证或窃取用户账户,特权账户会造成更大的破坏

防范

身份认证时第一道安全防线,身份认证需要防暴力破解、弱口令攻击。密码策略和验证码时互联网系统认证标配。

  • 密码策略

一般系统:8字符以上,且进行弱密码检查,并禁止包含用户名

重要系统:使用多种验证方式(如动态密码、短信等)

  • 首次登陆修改初始密码:首次登陆强制修改默认初始密码
  • 防密码暴力破解或猜解(或撞库):使用验证码登陆(如三次密码或账号尝试错误后出现)
  • 密码重置:验证旧密码或手机验证码
  • 邮箱/手机绑定:绑定操作需要用户确认(需要手工输入验证码)

越权操作

定义

越权操作指对系统进行超越自己权限的操作;

横向越权:非法获取同类用户权限

纵向越权:非法获取管理员或特权用户权限

成因

缺乏对用户权限的判断,及隐藏URL失效

危害

越权可造成非授权用户对所有数据、功能进行操作

防范

思路:用户全部请求进行权限检查

  • 验证每次请求(URL、数据资源)的用户权限
  • 参数随机化(避免可预测)
  • 管理后台加强认证和访问控制(如IP地址限制)

环境漏洞

常见Web安全漏洞及防范_第3张图片

第三方代码或组件

在使用第三方产品前,需要进行安全评估和版本筛选,从可信的网站(如官网下载),删除不必要的功能,并及时跟踪安全补丁。

API接口安全

接口安全认证

应对接口访问进行认证(服务器端分配API KEY),如使用Token/openid防范非法访问;IP白名单限制。

接口数据有效性检查

应对接口数据有效性进行检查,防范重放攻击和代码注入攻击。

接口数据加密传输

应使用数据加密、数字签名等方式保证数据保密性和完整性

接口访问权限及记录

应对接口的访问权限、访问频次进行控制,并记录接口访问的日志。

安全开发原则

永不信任用户输入

  1. 对用户输入的有效性检查
  2. 前端+后端双向验证
  3. 避免执行用户输入数据

最小攻击页面

  1. 最小权限
  2. 功能最小化(只实现需要功能)
  3. 输出最小化

纵深防御

  1. Web应用安全
  2. 操作安全
  3. 中间件安全
  4. 数据库安全
  5. 网络安全
  6. 客户端、移动APP安全

你可能感兴趣的:(计算机网络)