源代码安全审计研究

2026-04-09 国家保密科技测评中心

(3)编码处理

在不可信数据输出到页面之前,进行编码处理。使用addslashes()函数对字符串“’”“””“\”字符进行转义。使用htmispecialchars()函数对字符串“&”“””“<”“>”进行html编码。

(4)防止盗取Cookie

在重要的Cookie中加入HttpOnly属性,使得通过JavaScript脚本无法读取到Cookie信息,有效防止跨站脚本XSS攻击。

3.2.3 跨站请求伪造

3.2.3.1跨站请求伪造描述

跨站请求伪造(Cross Site Request Forgery,CSRF)是指攻击者通过伪装成来自受信任用户的请求,对受信任的网站执行操作的一种攻击方式。

3.2.3.2跨站请求伪造规范要求

(1)验证HTTP请求的Referer字段。Referer用于表明HTTP请求的来源地址。对每个HTTP请求验证其Referer值,如果Referer值是同一个域名下,则接受该请求;如果 Referer是其他网站,则有可能是CSRF攻击,拒绝该请求。

(2)在请求地址中添加token并验证。攻击者制造CSRF攻击所使用的用户验证信息均来自Cookie中,攻击者可以在不知道用户信息的情况下直接利用用户Cookie来通过安全验证。要抵御CSRF,可在HTTP请求中加入1个随机产生的token值,并在服务端校验token。正常访问时,客户端浏览器能够正确得到并传回这个随机数;而通过CSRF传来的欺骗性攻击中没有token或者token内容不正确,则拒绝该请求。

3.2.4 XML外部实体注入

3.2.4.1 外部实体注入描述

当开发人员配置XML解析功能允许外部实体引用时,攻击者通过发送恶意构造的XML数据对应用系统造成文件读取、命令执行、内网端口探测、命令执行、拒绝服务攻击等,从而导致XML外部实体注入。

3.2.4.2 XML外部实体注入规范要求

XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。DTD文档类型定义的作用是定义XML文档的合法构建模块,它使用一系列合法的元素来定义文档的结构,约束了XML文档的结构。DTD可以在XML文档内声明,也可以外部引用。

(1)在应用程序的所有XML解析器中禁用DTD文档类型定义,如图4所示。

图4 禁用DTD文档类型定义示例

(2)如果不可能完全禁用DTD文档类型定义,则禁用外部实体和参数实体,如图5所示。

图5 禁用外部实体和参数实体示例

3.2.5 文件上传漏洞

3.2.5.1文件上传漏洞描述

文件上传过程中,通常因为未校验上传文件后缀类型,导致用户可上传jsp等webshell文件。代码审计时重点关注上传文件类型校验及文件大小的限制。

3.2.5.2文件上传漏洞规范要求

(1)使用白名单方式限制可上传的文件类型,如图6所示,只允许上传扩展名为“gif”“jpg”“jpeg”“png”的图片文件。

图6 限制上传文件类型示例

(2)限制允许上传的文件大小,如图7所示,限制上传文件大小最大为100KB。

图7 限制上传文件大小示例

(3)限制文件上传目录的权限,对于文件上传目录设置可读、可写、不可执行权限,禁止用户上传的文件在后台执行。

3.2.6 命令执行漏洞

3.2.6.1命令执行漏洞描述

命令执行漏洞就是攻击者可以直接在应用中执行系统命令,从而获取敏感信息或者拿到shell权限。命令执行漏洞形成的原因是服务器对用户输入的命令没有进行验证和过滤,导致恶意代码被执行。

3.2.6.2命令执行漏洞规范要求

(1)尽量不使用系统执行命令,避免通过指定cmd /c或/bin/bash -c参数执行系统命令。

(2)应避免从客户端获取命令,无法避免时,应使用白名单对可执行的命令进行限制;白名单过大时,应使用正则校验限定用户输入数据中可包含的字符集。在系统命令需要接受用户输入时,未对输入参数作限制,允许任意命令输入。攻击者可以利用这个漏洞控制服务器,如图8所示。

正文暂未发布

当前稿件尚未补充正文内容,后续可在后台完善内容后自动恢复显示。你也可以先返回栏目页浏览其他资讯。

上一篇
下一篇