快速业务通道

C、C++和Java安全编码实践提示与技巧

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
(通常是表单参数)反射给用户。这种攻击载体的标准形式首先是通过搜索引擎结果页面显示出来的,通常会在页面标题中反射用户的查询关键词。如果未经过滤,这种反射回的查询关键词很可能包含一些编码不当的 HTML 标记,但可被接收方浏览器解释为有效的 HTML。

实际上,未经过滤的传入数据的任何反射都会造成问题,因为 XSS数量和种类始终在增加,参见示例4。

public void doGet(HttpServletRequest req, HttpServletResponse res)
{
string title = req.getParameter("searchTerm");
res.getOutputStream().write(title.getBytes("UTF-8"));
}

示例4 未经过滤的传入数据本身就存在问题。

XSS反射的表现十分简单,而解决此问题的方法也极为简单——将从传入请求中读取的一切内容编码,之后再回发给浏览器即可。尽管我们在这里的示例中使用了Java,但包括HTML编码机制的所有常见页面产品均可用以避免此类漏洞。例如,下面这条 ASP 语句就可能被利用:

Response.Write Request.Form("username""

反之,以下语句则不能被利用:

Response.Write Server.HTMLEncode( Request.Form("username"))

尽管仍然没有内置对象可用于执行标准转换,但也可在 Java 中进行类似转换,以避免此类利用。也就是说,可轻松编写一个类似的 String 转换程序。对于寻找“现成”产品包的用户,JTidy 项目(jtidy.sourceforge.net)是一个理想的起点。

其他更加复杂的 XSS 表现形式以未过滤用户输入的持久存储为中心,此类输入内容会在随后用于提供响应内容。这是一类更难以诊断的 XSS,因为攻击模式不仅依赖于所存储的未经过滤的用户输入,还依赖于此后对其他用户可用的存储数据。

在早期Web发展阶段,不可信任的论坛提供的软件包特别易受此类攻击模式的影响。即便是现在,在数据库(或文件)中存储未经过滤的传入数据并随后将所存储的数据发送给用户的应用程序也易于受到此类持久形式的 XSS 的攻击。

同样,解决方法非常简单,只需通过编程,在存储信息之前将信息编码或在将信息从持久存储发送给用户之前编码即可。总而言之,在存储之前编码数据总是更加安全,这种方式可以保证未来对此类数据的使用免遭XSS 攻击。

查找漏洞

本文介绍的问题的规避方法易于实现,但对于尝试控制现有代码库或新建代码库的安全性的开发人员或开发组织而言,所面临的最大挑战就是找到漏洞所在。毫无疑问,可以利用手动代码检查的方法,但我可以确定地说,围坐在桌边、查看大量代码并尝试找出可能成为漏洞的内容绝非乐事。

静态源代码分析为此类问题提供了一种可行的解决方案,这种方法关注代码中现有的潜在漏洞或弱点,而不是像传统安全性应用程序或渗透测试工具那样尝试找到现有漏洞或攻击载体 。利用 SCA 工具可显著减少查找并缓解此类问题所需的时间和工作量。

目前有多种开源和商业工具可用,分别具有不同的功能。Klocwork(我目前效力的企业)就提供了这样一种商业静态源代码分析产品套件,主要关注 C、C++ 和 Java,为开发人员提供了快速、准确的运行缺陷和安全漏洞分析,并且能够集成在您所选择的 IDE 之中。

文章来源:http://www.ddj.com/cpp/210602504

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号