Web常见漏洞及修复建议
SQL注入
漏洞描述
Web程序中对于用户提交的参数未做过滤直接拼接到SQL语句中执行,导致参数中的特殊字符破坏了SQL语句原有逻辑,攻击者可以利用该漏洞执行任意SQL语句,如查询数据、下载数据、写入webshell、执行系统命令以及绕过登录限制等。
修复建议
代码层最佳防御sql漏洞方案:使用预编译sql语句查询和绑定变量。
(1)使用预编译语句,使用PDO需要注意不要将变量直接拼接到PDO语句中。所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效的防止SQL注入攻击。
代码层最佳防御SQL漏洞方案:使用预编译SQL语句查询和绑定变量。
使用预编译语句
- 使用PDO时注意不要将变量直接拼接到PDO语句中
- 所有查询语句使用数据库提供的参数化查询接口
- 参数化语句使用参数而不是将用户输入变量嵌入到SQL语句中
- 当前几乎所有数据库系统都提供了参数化SQL语句执行接口
特殊字符处理
- 对进入数据库的特殊字符(’”<>&*;等)进行转义处理或编码转换
数据类型确认
- 确认每种数据的类型,数字型数据必须是数字
- 数据库中的存储字段必须对应为int型
数据长度限制
- 严格规定数据长度,防止较长的SQL注入语句执行
统一编码
- 网站每个数据层的编码统一,建议全部使用UTF-8编码
- 避免因上下层编码不一致导致过滤模型被绕过
权限控制
- 严格限制网站用户的数据库操作权限
- 仅提供满足工作所需的最小权限
错误信息处理
- 避免显示SQL错误信息(如类型错误、字段不匹配等)
- 防止攻击者利用错误信息进行判断
危险字符过滤
- 使用正则表达式匹配危险关键字(union、sleep、and、select、load_file等)
- 匹配到危险关键字则终止运行
XSS漏洞
漏洞描述
1、Web程序代码中对用户提交的参数未做过滤或过滤不严,导致参数中的特殊字符破坏了HTML页面的原有逻辑,攻击者可以利用该漏洞执行恶意HTML/JS代码、构造蠕虫、篡改页面实施钓鱼攻击、以及诱导用户再次登录,然后获取其登录凭证等。
2、XSS攻击对Web服务器本身虽无直接危害,但是它借助网站进行传播,对网站用户进行攻击,窃取网站用户账号身份信息等,从而也会对网站产生较严重的威胁。
XSS攻击可导致以下危害:
1、钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目标网站重定向到钓鱼网站,或者通过注入钓鱼JavaScript脚本以监控目标网站的表单输入,甚至攻击者基于DHTML技术发起更高级的钓鱼攻击。
2、网站挂马:跨站时,攻击者利用Iframe标签嵌入隐藏的恶意网站,将被攻击者定向到恶意网站上、或弹出恶意网站窗口等方式,进行挂马。
3、身份盗用:Cookie是用户对于特定网站的身份验证标志,XSS攻击可以盗取用户的cookie,从而利用该cookie盗取用户对该网站的操作权限。
4、盗取网站用户信息:当窃取到用户cookie从而获取到用户身份时,攻击者可以盗取到用户对网站的操作权限,从而查看用户隐私信息。
5、垃圾信息发送:在社交网站社区中,利用XSS漏洞借用被攻击者的身份发送大量的垃圾信息给特定的目标群。
6、劫持用户Web行为:一些高级的XSS攻击甚至可以劫持用户的Web行为,从而监视用户的浏览历史、发送与接收的数据等等。
7、XSS蠕虫:借助XSS蠕虫病毒还可以用来打广告、刷流量、挂马、恶作剧、破坏数据、实施DDoS攻击等。
修复建议
xss漏洞本质上是一种html注入,也就是将html代码注入到网页中。那么其防御的根本就是在将用户提交的代码显示到页面上时做好一系列的过滤与转义
(1)过滤输入的数据,对例如:“ ‘ ”,“ “ ”,” < “,” > “,” on* “,script、iframe等危险字符进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
XSS漏洞本质上是一种HTML注入,防御的根本是在将用户提交的代码显示到页面上时做好过滤与转义:
输入过滤
- 对危险字符进行严格检查,包括:
- 单双引号(’、”)
- 尖括号(<、>)
- on*事件(如onclick、onload等)
- script、iframe等标签
- 检查范围应包括:
- 用户直接交互的输入接口
- HTTP请求中的Cookie变量
- HTTP请求头部变量
- 对危险字符进行严格检查,包括:
数据验证
- 验证数据类型
- 验证数据格式
- 验证数据长度
- 验证数据范围
- 验证数据内容
服务端过滤
- 客户端验证仅作为辅助
- 关键过滤步骤必须在服务端进行
输出编码
- 对输出到页面的数据进行编码转换:
- HTML实体编码
- JS编码
- 检查所有输出点,包括:
- 数据库值在多处输出的情况
- 即使输入已编码,输出时仍需检查
- 对输出到页面的数据进行编码转换:
参考:https://www.freebuf.com/company-information/165769.html
XXE (XML外部实体注入)
漏洞描述
XXE(XML External Entity)攻击利用XML解析器处理外部实体的功能,通过构造恶意XML文档,攻击者可实现:
- 读取服务器本地文件
- 发起内网扫描/攻击
- 执行远程代码
- 发起拒绝服务攻击
常见攻击场景:
- 上传恶意XML文件
- 修改请求内容类型为XML
- 利用SOAP接口注入
修复建议
禁用外部实体
- 配置XML解析器禁用DTD和外部实体
- 关键配置:
- PHP: libxml_disable_entity_loader(true)
- Java: setFeature(“http://apache.org/xml/features/disallow-doctype-decl“, true)
- Python: defusedxml替代标准库
输入过滤
- 严格过滤用户提交的XML数据
- 重点关注:
- <!DOCTYPE>
- <!ENTITY>
- SYSTEM/PUBLIC关键字
- 实现要点:
- 使用白名单验证
- 限制XML文档大小
安全配置
- 使用最新版本XML解析器
- 配置解析器安全属性:
- 禁用外部实体引用
- 禁用DTD
- 禁用XInclude
- 最小权限运行解析服务
输出编码
- 对XML输出内容进行编码
- 防止XML注入:
- HTML实体编码
- CDATA包裹用户输入
CSRF
漏洞描述:
CSRF是跨站请求伪造,不攻击网站服务器,而是冒充用户在站内的正常操作。通常由于服务端没有对请求头做严格过滤引起的。CSRF会造成密码重置,用户伪造等问题,可能引发严重后果。绝大多数网站是通过 cookie 等方式辨识用户身份,再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。CSRF攻击会令用户在不知情的情况下攻击自己已经登录的系统。
修复建议
1、验证请求的Referer是否来自本网站,但可被绕过。
2、在请求中加入不可伪造的token,并在服务端验证token是否一致或正确,不正确则丢弃拒绝服务。
Referer验证
- 验证请求的Referer是否来自本网站
- 注意:此方法可被绕过,需结合其他防护措施
Token验证
- 在请求中加入不可伪造的token
- 服务端验证token是否一致或正确
- 验证不通过则拒绝请求
- 实现要点:
- Token需随机生成且不可预测
- Token需与用户会话绑定
- Token需设置合理有效期
SSRF
漏洞描述:
SSRF(Server-Side Request Forgery,服务器端请求伪造):通俗的来说就是我们可以伪造服务器端发起的请求,从而获取客户端所不能得到的数据。SSRF漏洞形成的原因主要是服务器端所提供的接口中包含了所要请求的内容的URL参数,并且未对客户端所传输过来的URL参数进行过滤。这个漏洞造成的危害有:
(1)、可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
(2)、攻击运行在内网或本地的应用程序(比如溢出);
(3)、对内网Web应用进行指纹识别,通过访问默认文件实现;
(4)、攻击内外网的Web应用,主要是使用Get参数就可以实现的攻击(比如Struts2漏洞利用,SQL注入等);
(5)、利用File协议读取本地文件。
修复建议
1、禁用不需要的协议,只允许HTTP和HTTPS请求,可以防止类似于file://, gopher://, ftp:// 等引起的问题。
2、白名单的方式限制访问的目标地址,禁止对内网发起请求
协议限制
- 禁用不需要的协议
- 仅允许HTTP和HTTPS请求
- 防止file://, gopher://, ftp://等协议引起的问题
访问控制
- 使用白名单限制访问目标地址
- 禁止对内网发起请求
- 实现要点:
- 维护可信域名/IP列表
- 严格校验目标地址
响应验证
- 过滤或屏蔽请求返回的详细信息
- 验证远程服务器响应是否符合预期
- 特别处理文件获取场景:
- 验证返回信息是否符合标准
- 验证文件格式
安全配置
- 禁止跳转
- 限制请求端口为常用HTTP端口:
- 80 (HTTP)
- 443 (HTTPS)
- 8080
- 8000
- 统一错误信息
- 避免通过错误信息暴露端口状态
命令代码执行
命令或代码执行漏洞是指代码未对用户可控参数做过滤,导致直接带入执行命令和代码,通过漏洞执行恶意构造的语句,执行任意命令或代码。攻击者可在服务器上执行任意命令,读写文件操作等,危害巨大。
修复建议
修复建议
输入过滤
- 严格过滤用户输入数据
- 禁止执行非预期系统命令
- 实现要点:
- 使用白名单机制验证输入
- 对特殊字符进行转义处理
函数使用限制
- 减少或不使用代码/命令执行函数
- 必须使用时:
- 进行严格的权限控制
- 记录详细日志
变量检测
- 客户端提交的变量必须经过检测
- 检测内容包括:
- 变量类型
- 变量内容
- 变量长度
危险函数处理
- 识别并减少使用危险函数
- 必须使用时:
- 进行沙箱隔离
- 设置执行超时
- 限制资源使用
任意文件上传
漏洞描述
文件上传漏洞通常由于代码中对文件上传功能所上传的文件过滤不严或web服务器相关解析漏洞未修复而造成的,如果文件上传功能代码没有严格限制和验证用户上传的文件后缀、类型等,攻击者可通过文件上传点上传任意文件,包括网站后门文件(webshell)控制整个网站。
修复建议
修复建议
文件类型验证
- 前端和后端双重验证
- 后端验证措施包括:
- 扩展名检测
- 文件重命名
- MIME类型检测
- 文件大小限制
- 可选方案:将上传文件存储到独立文件服务器
文件内容校验
- 严格限制和校验上传文件
- 禁止上传恶意代码文件
- 实现要点:
- 检查文件头信息
- 验证文件内容结构
- 扫描潜在恶意代码
安全配置
- 限制上传目录执行权限
- 防止木马执行
- 严格限制上传文件路径
- 隐藏上传文件真实路径
白名单机制
- 文件扩展名服务端白名单校验
- 仅允许安全文件类型
- 拒绝未知扩展名
内容检测
- 服务端校验文件内容
- 检测方法:
- 文件特征分析
- 内容签名验证
- 病毒扫描
文件处理
- 上传文件重命名
- 使用随机文件名
- 避免使用用户提供的原始文件名
目录穿越/目录遍历
漏洞描述
文件下载或获取文件显示内容页面由于未对传入的文件名进行过滤,利用路径回溯符../跳出程序本身的限制目录,来下载或显示任意文件。
修复建议
修复建议
文件名过滤
- 严格过滤传入的文件名参数
- 过滤回溯符(../)
- 实现要点:
- 使用正则表达式检测非法路径
- 拒绝包含特殊字符的路径
文件类型验证
- 判断请求的文件类型是否允许获取
- 建立允许的文件类型白名单
- 拒绝不在白名单中的文件类型
路径规范化
- 对文件路径进行规范化处理
- 解析相对路径为绝对路径
- 验证最终路径是否在允许范围内
权限控制
- 限制文件访问权限
- 确保用户只能访问授权范围内的文件
- 实现最小权限原则
文件包含
漏洞描述
本地文件包含是指程序在处理包含文件的时候没有严格控制。利用这个漏洞,攻击者可以先把上传的文件、网站日志文件等作为代码执行或直接显示出来,或者包含远程服务器上的恶意文件,进而获取到服务器权限。
修复建议
修复建议
变量初始化检查
- 严格检查变量是否已初始化
- 禁止使用未初始化的变量
- 实现要点:
- 设置默认值
- 进行空值检查
文件路径验证
- 对所有输入的文件地址进行严格检查
- 检查范围包括:
- 服务器本地文件
- 远程文件
- 禁止路径回溯符(./和../)
- 实现要点:
- 使用绝对路径
- 验证路径是否在允许范围内
参数控制
- 严格检查文件包含函数的参数
- 确保参数不受外部控制
- 实现要点:
- 使用白名单机制
- 禁止动态拼接路径
- 限制包含文件类型
弱口令
漏洞描述
由于网站用户帐号存在弱口令,导致攻击者通过弱口令可轻松登录到网站中,从而进行下一步的攻击,如上传webshell,获取敏感数据。
另外攻击者利用弱口令登录网站管理后台,可执行任意管理员的操作。
修复建议
修复建议
初始密码策略
- 强制用户首次登录时修改默认口令
- 或使用用户自定义初始密码策略
- 实现要点:
- 设置密码修改提醒
- 禁止使用常见默认密码
密码复杂度要求
- 密码长度至少8位
- 包含以下至少3种字符类型:
- 数字(0-9)
- 小写字母(a-z)
- 大写字母(A-Z)
- 特殊字符(!@#$%^&*等)
- 拒绝常见弱密码组合
访问控制
- 增加人机验证机制
- 限制IP访问频率
- 实现要点:
- 设置登录失败锁定机制
- 记录异常登录尝试
暴力破解
漏洞描述
由于没有对登录页面进行相关的人机验证机制,如无验证码、有验证码但可重复利用以及无登录错误次数限制等,导致攻击者可通过暴力破解获取用户登录账号和密码。
修复建议
修复建议
账户锁定机制
- 设置登录失败次数阈值
- 超过阈值后锁定账户
- 实现要点:
- 设置合理的锁定时间
- 提供管理员解锁途径
- 记录锁定事件日志
IP限制机制
- 监控IP登录频率
- 设置IP登录失败阈值
- 超过阈值后限制IP访问
- 实现要点:
- 动态调整限制时间
- 区分正常和异常访问模式
人机验证
- 增加验证码机制
- 使用行为验证码
- 实现要点:
- 验证码复杂度适中
- 定期更新验证码策略
- 防止验证码绕过
验证码校验
- 服务器端严格校验验证码
- 禁止仅依赖客户端校验
- 实现要点:
- 验证码一次性有效
- 验证码与会话绑定
- 验证码有效期控制
越权访问
漏洞描述
由于没有对用户访问角色的权限进行严格的检查及限制,导致当前账号可对其他账号进行相关操作,如查看、修改等。对低权限对高权限账户的操作为纵向越权,相同权限账户之间的操作成为横向越权也称水平越权。
修复建议
修复建议
权限控制
- 严格检查用户角色权限
- 实现最小权限原则
- 关键措施:
- 基于角色的访问控制(RBAC)
- 权限继承关系管理
- 操作级权限校验
会话管理
- 使用session管理用户身份
- 关键实现:
- 会话绑定用户ID和角色
- 敏感操作二次验证
- 会话超时设置
- 防止会话固定攻击
请求验证
- 验证每个请求的权限
- 关键检查点:
- 资源所有权
- 操作权限
- 数据范围权限
- 拒绝未经授权的请求
未授权访问
漏洞描述
由于没有对网站敏感页面进行登录状态、访问权限的检查,导致攻击者可未授权访问,获取敏感信息及进行未授权操作。
修复建议
修复建议
访问控制
- 实施严格的权限控制机制
- 关键措施:
- 默认拒绝所有访问
- 基于角色/属性的访问控制
- 敏感操作二次验证
- 记录所有访问日志
身份验证
- 使用session管理用户身份
- 关键实现:
- 会话绑定用户身份信息
- 会话超时设置
- 防止会话劫持
- 敏感操作重新认证
权限检查
- 每个请求进行权限验证
- 检查要点:
- 用户角色权限
- 资源访问权限
- 操作执行权限
- 拒绝未经授权的请求
列目录
漏洞描述
由于web服务器配置不当,开启了目录浏览,攻击者可获得服务器上的文件目录结构,获取敏感文件。
修复建议
修复建议
禁用目录索引
- 修改中间件配置文件
- 适用中间件包括:
- IIS
- Apache
- Tomcat
- 实现要点:
- 查找并修改相关配置项
- 重启服务使配置生效
权限控制
- 设置严格的目录访问权限
- 实现要点:
- 限制用户访问权限
- 遵循最小权限原则
- 定期审计权限设置
PHP反序列化
漏洞描述
php反序列化漏洞也叫PHP对象注入,形成原因为程序未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行、文件操作、执行数据库操作等不可控后果。这一类攻击在java、python等面向对象语言中均存在。
可参考:https://www.freebuf.com/articles/web/167721.html
修复建议
修复建议
输入过滤
- 对传入的对象进行严格过滤检查
- 实现要点:
- 验证对象来源
- 检查对象签名
- 使用白名单机制
参数控制
- 检查反序列化过程中的危险操作
- 重点关注:
- 文件读写函数
- 命令执行函数
- 代码执行函数
- 确保没有用户可控参数
安全配置
- 使用最新版本的序列化库
- 限制反序列化功能权限
- 记录反序列化操作日志
http slow拒绝服务攻击
漏洞描述
按照设计,HTTP协议要求服务器在处理之前完全接收请求。 如果HTTP请求没有完成,或者传输速率非常低,服务器会保持其资源忙于等待其余数据。如果服务器保持太多的资源请求和处理,这将造成一个拒绝服务。严重者一台主机即可让web运行缓慢甚至是崩溃。
修复建议
修复建议
超时设置
- 设置合理的timeout时间
- Apache默认启用reqtimeout模块
- 配置要点:
- 限制Header发送时间和频率
- 限制Body发送时间和频率
- 适用于所有Web服务器
连接数优化
- 增大MaxClients/MaxRequestWorkers
- 注意:
- MaxRequestWorkers在2.3.13版本前称为MaxClients
- 两者功能相同
- 根据服务器性能调整
防护配置
- 结合timeout和最大连接数设置
- 防止Slow Attack占满连接
- 其他防护措施:
- 启用防DDoS模块
- 限制单个IP连接数
- 监控异常连接
CRLF注入
漏洞描述
CRLF 是“回车 +换行”(\r\n)的简称。在 HTTP 协议中,HTTPHeader 与 HTTP Body 是用两个 CRLF 符号进行分隔的,浏览器根据这两个 CRLF 符号来获取 HTTP 内容并显示。因此,一旦攻击者能够控制 HTTP 消息头中的字符,注入一些恶意的换行,就能注入一些会话 Cookie 或者 HTML 代码。
修复建议
修复建议
特殊字符过滤
- 过滤换行符及其编码形式:
- \r (回车)
- \n (换行)
- URL编码形式(%0D, %0A)
- HTML实体编码
- 实现要点:
- 在输入和输出端都进行过滤
- 使用正则表达式严格匹配
- 过滤换行符及其编码形式:
HTTP头处理
- 安全处理HTTP头信息
- 关键措施:
- 验证头字段格式
- 禁止用户控制头字段
- 使用安全的头设置API
编码输出
- 对输出内容进行适当编码
- 防止注入攻击:
- URL编码
- HTML实体编码
- JavaScript编码
LDAP注入
漏洞描述
由于Web 应用程序没有对用户发送的数据进行适当过滤和检查,攻击者可修改LDAP 语句的结构,并且以数据库服务器、Web 服务器等的权限执行任意命令,许可权可能会允许查询、修改或除去 LDAP 树状构造内任何数据。
修复建议
修复建议
输入过滤
- 对用户输入内容进行严格过滤
- 重点关注:
- 特殊字符(如*()|&等)
- LDAP查询语法关键词
- 实现要点:
- 使用白名单机制
- 对输入进行编码处理
参数化查询
- 使用LDAP参数化查询
- 避免拼接用户输入
- 实现要点:
- 使用预编译查询模板
- 绑定变量执行查询
权限控制
- 限制LDAP查询权限
- 关键措施:
- 使用最小权限账户
- 限制查询范围和深度
- 记录所有查询操作
URL 跳转
漏洞描述
有的Web 应用程序中使用URL参数中的地址作为跳转链接的功能 ,攻击者可实施钓鱼、恶意网站跳转等攻击。
修复建议
修复建议
URL验证
- 跳转前严格校验目标URL
- 验证要点:
- 是否为可信域名
- 是否符合预期格式
- 是否在白名单内
白名单机制
- 建立跳转链接白名单
- 实现要点:
- 维护可信域名列表
- 动态更新白名单
- 拒绝非白名单跳转
安全跳转
- 使用中间跳转页
- 显示目标链接并确认
- 记录所有跳转操作
- 监控异常跳转行为
明文传输
漏洞描述
用户登录过程中使用明文传输用户登录信息,若用户遭受中间人攻击时,攻击者可直接获取该用户登录账户,从而进行进一步渗透。
修复建议
修复建议
数据加密传输
- 对敏感信息进行加密传输
- 可采用的加密算法:
- 不可逆hash算法加盐(4位及以上随机盐值)
- 安全对称加密算法(如AES-128/192/256)
- 非对称加密算法(如RSA-2048、SM2)
- 实现要点:
- 服务器端生成加密密钥
- 保证客户端密钥安全
HTTPS强制使用
- 全站启用HTTPS
- 配置要点:
- 使用TLS 1.2+协议
- 配置安全的加密套件
- 启用HSTS头
- 定期更新SSL证书
安全增强
- 实现完美前向保密
- 禁用不安全的加密算法
- 定期进行安全扫描
- 监控异常传输行为
网页木马
漏洞描述
经渗透测试发现目标站点存在webshell,攻击者可直接爆破口令使用木马,非常低成本的进行恶意操作。
修复建议
修复建议
木马清除
- 确认并删除所有木马文件
- 进行全盘文件扫描
- 排查要点:
- 检查最近修改的文件
- 查找可疑的隐藏文件
- 验证文件完整性
漏洞修复
- 发现并修复所有存在的漏洞
- 重点检查:
- 文件上传功能
- 代码执行漏洞
- 未授权访问点
安全加固
- 全面安全排查:
- 检查系统日志
- 运行杀毒软件扫描
- 检查可疑进程
- 确保无后门程序
- 修改所有相关密码
- 全面安全排查:
备份文件泄露
漏洞描述
网站备份文件或、敏感信息文件存放在某个网站目录下,攻击者可通过文件扫描等方法发现并下载该备份文件,导致网站敏感信息泄露。
修复建议
修复建议
文件存放规范
- 禁止在网站目录下存放:
- 网站备份文件
- 敏感信息文件
- 实现要点:
- 建立专门的备份存储位置
- 设置严格的访问权限
- 禁止在网站目录下存放:
文件命名安全
- 如需存放备份文件:
- 使用无规则字符串命名
- 避免包含敏感信息
- 示例:
bkp_5f8d3a1e9c.zip
- 额外措施:
- 加密备份文件
- 限制文件访问IP
- 如需存放备份文件:
敏感信息泄露
漏洞描述
在页面中或者返回的响应包中泄露了敏感信息,通过这些信息,给攻击者渗透提供了非常多的有用信息。
修复建议
修复建议
无用程序处理
- 删除探针/测试页面等无用程序
- 或重命名为难以猜解的名称
- 示例:将
test.php改为x3j9f8.php
敏感页面控制
- 评估业务需求后:
- 删除敏感信息页面
- 或设置访问权限控制
- 禁止公开访问敏感页面
- 评估业务需求后:
信息模糊化
- 服务器端处理敏感信息:
- 部分隐藏(如显示***)
- 数据脱敏
- 加密存储
- 服务器端处理敏感信息:
数据校验
- 严格检查返回数据:
- 验证查询与显示数据一致性
- 过滤不必要的信息
- 实施最小数据暴露原则
- 严格检查返回数据:
短信/邮件轰炸
漏洞描述
由于没有对短信或者邮件发送次数进行限制,导致可无限次发送短信或邮件给用户,从而造成短信轰炸,进而可能被大量用户投诉,从而影响公司声誉。
修复建议
修复建议
频率限制
- 严格限制发送频率:
- 同一账号:1分钟内最多发送1次
- 同一账号:24小时内最多发送3次
- 实现要点:
- 基于账号/IP双重限制
- 分布式计数确保准确性
- 严格限制发送频率:
验证机制
- 增加发送验证:
- 图形验证码
- 短信验证码确认
- 行为验证(如滑块验证)
- 增加发送验证:
监控报警
- 实时监控异常发送行为
- 设置自动报警阈值
- 人工审核可疑操作
phpinfo信息泄漏
漏洞描述
Web站点的某些测试页面可能会使用到PHP的phpinfo()函数,会输出服务器的关键信息,造成服务器信息泄露,为攻击提供有利的信息。
修复建议
修复建议
函数处理
- 删除或禁用phpinfo函数
- 实现方法:
- 修改php.ini配置
- 使用disable_functions指令
文件清理
- 评估文件用途:
- 无用则直接删除
- 必需则重命名并限制访问
- 示例:将
info.php改为随机名称
- 评估文件用途:
访问控制
- 限制访问权限:
- IP白名单访问
- 基本认证保护
- 生产环境完全禁用
- 限制访问权限:
IIS短文件名泄露漏洞
漏洞描述
Internet Information Services(IIS,互联网信息服务)是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。 Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件。危害:攻击者可以利用“~”字符猜解或遍历服务器中的文件名,或对IIS服务器中的.Net Framework进行拒绝服务攻击。
攻击者可通过该漏洞尝试获取网站服务器文件的文件名,达到获取更多信息来入侵服务器的目的。
修复建议
修改Windows配置,关闭短文件名功能。
1.关闭NTFS 8.3文件格式的支持。该功能默认是开启的,对于大多数用户来说无需开启。
2.如果是虚拟主机空间用户,可采用以下修复方案:
1)修改注册列表HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation的值为1(此修改只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除)。
2)如果你的web环境不需要asp.net的支持你可以进入Internet 信息服务(IIS)管理器 — Web 服务扩展 - ASP.NET 选择禁止此功能。
3)升级net framework 至4.0以上版本。
3.将web文件夹的内容拷贝到另一个位置,比如D:\www到D:\www.back,然后删除原文件夹D:\www,再重命名D:\www.back到D:\www。如果不重新复制,已经存在的短文件名则是不会消失的。
应用程序错误信息泄露
漏洞描述
攻击者可通过特殊的攻击向量,使web服务器出现500、403等相关错误,导致信息泄漏如绝对路径、webserver版本、源代码、sql语句等敏感信息,恶意攻击者很有可能利用这些信息实施进一步的攻击。
修复建议
1、自定义错误页面或使用统一的错误页面提示。
Apache Tomcat默认文件
漏洞描述
Apache Tomcat默认样例文件没有删除或限制访问,可能存在cookie、session伪造,进行后台登录操作
修复建议
1、删除样例文件
2、限制文件访问权限
Crossdomain.xml 配置不当
漏洞描述
网站根目录下的 crossdomain.xml 文件指明了远程Flash 是否可以加载当前网站的资源(图片、网页内容、Flash等)。如果配置不当,可能导致遭受跨站请求伪造(CSRF)攻击。
修复建议
对于不需要从外部加载资源的网站,在 crossdomain.xml 文件中更改allow-access-from的domain属性为域名白名单。
目标服务器启用了不安全 HTTP 方法
漏洞描述
目标服务器启用了不安全的传输方法,如PUT、TRACE、DELETE、MOVE等,这些方法表示可能在服务器上使用了 WebDAV,由于dav方法允许客户端操纵服务器上的文件,如上传、修改、删除相关文件等危险操作,如果没有合理配置dav,有可能允许未授权的用户对其进行利用,修改服务器上的文件。
修复建议
1、关闭不安全的传输方法,只开启POST、GET方法。
2、如果服务器不使用 WebDAV 可直接禁用,或为允许webdav的目录配置严格的访问权限,如认证方法,认证需要的用户名,密码。
weblogic SSRF服务器请求伪造
漏洞描述
目标存在weblogic SSRF服务器请求伪造漏洞。WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。Weblogic中间件默认带有“UDDI 目录浏览器”且为未授权访问,通过该应用,可进行无回显的SSRF请求。攻击者可利用该漏洞对企业内网进行大规模扫描,了解内网结构,并可能结合内网漏洞直接获取服务器权限。
修复建议
1、若不影响业务则可删除uddiexplorer文件夹
2、限制uddiexplorer应用只能内网访问
Apache Struts2 远程代码执行漏洞(S2-019)
漏洞描述
Apache Struts2的“Dynamic MethodInvocation”机制是默认开启的,仅提醒用户如果可能的情况下关闭此机制,如果未关闭此机制将导致远程代码执行漏洞,远程攻击者可利用此漏洞在受影响应用上下文中执行任意代码。
修复建议
1、目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载。
2、或者手工设置struts.xml文件<constantname=”struts.enable.DynamicMethodInvocation”value=”false”/>
Apache Struts2 远程代码执行漏洞(S2-037)
漏洞描述
Apache Struts2在使用REST插件时,攻击者可以绕过动态方法执行的限制,调用恶意表达式执行远程代码。
修复建议
建议用户到官方获取最新补丁或者最新版本程序。
Apache Struts2 DevMode 远程代码执行漏洞
漏洞描述
为了便于开发人员调试程序,Struts2提供了一个devMode模式,可以方便查看程序错误以及日志等信息。当Struts2中的devMode模式设置为true时,存在严重远程代码执行漏洞。如果WebService 启动权限为最高权限时,可远程执行任意命令,包括关机、建立新用户、以及删除服务器上所有文件等等。
修复建议
建议用户到官方获取最新补丁或者最新版本程序。
或者将struts.properties中的devMode设置为false,或是在struts.xml中添加如下代码: <constant name=”struts.devMode”value=”false”/>。
Apache Struts2 远程代码执行漏洞(S2-045)
漏洞描述
Apache Struts2的Jakarta Multipartparser插件存在远程代码执行漏洞,漏洞编号为CVE-2017-5638。攻击者可以在使用该插件上传文件时,修改HTTP请求头中的Content-Type值来触发该漏洞,导致远程执行代码。
修复建议
检测方式查看web目录下/WEB-INF/lib/目录下的struts-core.x.x.jar ,如果这个版本在Struts2.3.5 到 Struts2.3.31 以及 Struts2.5 到 Struts2.5.10之间则存在漏洞。
1、建议用户到官方获取最新补丁或者最新版本程序。
2、更新至Strusts2.3.32或者Strusts2.5.10.1,或使用第三方的防护设备进行防护。
3、临时解决方案:删除commons-fileupload-x.x.x.jar文件(会造成上传功能不可用)。
4、修改WEB-INF/classes目录下的配置
在WEB-INF/classes目录下的struts.xml中的struts 标签下添加
<constantname=”struts.custom.i18n.resources”value=”global”/>;
在WEB-INF/classes/目录下添加global.properties,文件内容如下:
struts.messages.upload.error.InvalidContentTypeException=1
Apache Struts2 远程代码执行漏洞(S2-033)
漏洞描述
Apache Struts2在开启动态方法调用(DynamicMethod Invocation)的情况下,攻击者使用REST插件调用恶意表达式可以远程执行代码。
修复建议
1、用户到官方获取最新补丁或者最新版本程序。
2、或者在允许的情况下禁用动态方法调用(Dynamic Method Invocation),修改Struts2的配置文件struts.xml,将struts.enable.DynamicMethodInvocation设置为“false”。
Redis未授权访问
漏洞描述
Redis默认没有设置认证口令,可能导致:
- 未授权访问造成信息泄露
- 若Redis以高权限账户运行,可能导致服务器权限丢失
- 攻击者可写入SSH公钥获取服务器权限
修复建议
高危命令禁用
- 禁用危险命令:
- flushdb, flushall
- config, keys
- 其他管理命令
- 实现方法:
- 修改redis.conf配置文件
- 使用rename-command指令
- 禁用危险命令:
权限控制
- 使用专用redis用户运行服务
- 实现最小权限原则
- 关键配置:
- 设置合理的文件权限
- 限制命令执行权限
认证机制
- 启用密码验证
- 配置要点:
- 使用强密码
- 定期更换密码
- 限制密码尝试次数
网络隔离
- 禁止外网访问Redis
- 实现方法:
- 绑定内网IP
- 配置防火墙规则
- 使用VPN访问
SSH密钥保护
- 保护authorized_keys文件
- 关键措施:
- 设置严格的文件权限
- 监控文件修改
- 使用密钥认证而非密码
SwaggerUI未授权访问
漏洞描述
SwaggerUI页面泄露是指因配置不当导致API文档页面(如swagger-ui.html)被未授权访问,攻击者可获取:
- 系统API接口详情
- 请求参数和URL路径
- 数据结构等敏感信息
进而利用这些信息发起精准攻击
修复建议
访问控制
- 添加身份验证机制:
- OAuth2认证
- Basic Auth认证
- IP白名单限制
- 修改默认访问路径为复杂字符串
- 添加身份验证机制:
敏感信息保护
- 清理文档中的敏感内容:
- 硬编码密钥
- 密码字段
- 调试参数
- 动态屏蔽敏感字段:
- password
- secretKey
- 其他凭证信息
- 清理文档中的敏感内容:
功能限制
- 禁用”Try it out”调试功能
- 生产环境移除SwaggerUI
- 仅限开发环境使用
网络安全
- 强制启用HTTPS
- API网关防护:
- 身份校验
- 请求限流
- 熔断机制
维护更新
- 使用最新稳定版本
- 定期安全扫描:
- 默认路径检查
- 漏洞扫描
- 禁用Spring Boot敏感端点:
- /actuator/env
- /actuator/heapdump