c++代码示例_2个小时学会源代码审计
很多刚入行信息安全的童鞋总喜欢抱怨Code Audit很难,CA工作涉及多种开发语言,如C/C++/Java/Javascript/JSP/PHP/Python等等,结合自身多年的代码审计经验,在这里我总结了一些可以快速上手的技巧,帮助你们快速出活。下面列举审计中最常见的十类Java安全漏洞。
一、日志伪造Log Forging:将未经验证的用户输入写入日志文件可致使攻击者伪造日志条目或将恶意信息内容注入日志。
示例代码:
1
修复代码:
1
审计技巧:看代码中是否有像第7、8行这样的过滤掉rn这两个换行符。
二、资源未释放:数据流Unreleased Resource: Streams:此类漏洞导致程序可能无法成功释放某一项系统资源。
示例代码:
1
修复代码:
public
审计技巧:看代码中是否对输入流判断非null值再进行数据流关闭。(假如是Java8.0版本语言开发,则可以直接对数据进行关闭)
三、跨站脚本:反射型Cross-Site Scripting: Reflected:向一个 Web 浏览器发送未经验证的数据会导致该浏览器执行恶意代码。
示例代码:
以下
修复代码:使用struts自带的跨站修复函数方式
对于Spring框架项目中,有专门加密配置文件密码的方法如下:
public
审计技巧:看代码中是否对前端输入的数据进行特殊符号的转义过滤,重点关注函数“filtedText”。
四、密码管理:密码在配置文件中Password Management: Password in Configuration File:在配置文件中存储明文密码,可能会危及系统安全。
示例代码:
<
修复代码:
1
审计技巧:查看程序代码中是否存在敏感信息,安全开发规范标准中明确规定敏感信息应 加密&存储 于配置文件中。
五、sql注入SQL Injection:通过不可信来源的输入构建动态 SQL 指令,攻击者就能够修改指令的含义或者执行任意 SQL 命令。
示例代码:
public
修复代码:
public
审计技巧:查看代码中是否有使用PreparedStatement参数化查询。
六、动态代码评估:代码注入Dynamic Code Evaluation: Code Injection:在运行时中解析用户控制的指令,会让攻击者有机会执行恶意代码。
示例代码:
<
修复代码:
使用正则表达式对传入的代码参数进行约束,限制外界传入 eval 的参数中只包含字母和数字。
<
审计技巧:查看代码中是否有对传入参数进行过滤。
七、可移植性缺陷:文件分隔符Portability Flaw: File Separator:使用硬编码文件分隔符会导致可移植性问题。
示例代码:
以下代码使用硬编码文件分隔符来打开文件
修复代码:
使用独立于平台的 API 来指定文件分隔符:
...
审计技巧:查看代码中是否调用了File.separator来代替分隔符“”,“/”。
八、Open重定向Open Redirect:如果允许未验证的输入控制重定向机制所使用的 URL,可能会有利于攻击者发动钓鱼攻击。
示例代码:
<%
修复代码:
<%
审计技巧:查看代码中是否有使用创建编号的方法指定并校验重定向的目标URL。
九、弱加密Weak Encryption:识别调用会使用无法保证敏感数据的保密性的弱加密算法。
审计技巧:加密算法不应为MD5或者DES,至少应该是3DES,金融行业的话,至少应该是AES。
十、弱加密:RSA不恰当填充Weak Encryption: Inadequate RSA Padding:
示例代码:
public
修复代码:
public
审计技巧:加密算法后面的填充方式不应为空或者是ECB,至少应CBC。