《高质量程序设计艺术》样章连载——3.5 不可信输入
原书名:Code Quality: The Open Source Perspective
<o:p></o:p>
<!---->1. <!---->深入剖析著名开源软件的质量问题<o:p></o:p>
<!---->2. <!---->全面阐述C、C++和Java代码中的常见编程错误<o:p></o:p>
<!---->3. <!---->指导你编写优秀代码的圣经<o:p></o:p>
<o:p> </o:p>
更多详细信息:http://www.china-pub.com/37661<o:p></o:p>
----------------------------------------------------------------------------------------------------------------------<o:p></o:p>
3.5 不可信输入
通常,当程序接受并且使用来自不可信数据源的输入时,就有安全漏洞问题。看看telnet守护程序(Windows中的术语是服务)telnetd,该程序使用DARPA设计的TELNET协议提供远程终端访问服务。这个守护程序通常以超级用户(管理员)的特权运行,并且可以从远端接受环境变量的值,这些环境变量允许远端用户指定一些设置,例如编辑器和打印机的偏好以及终端设置等。但是,有一些环境变量会从根本上改变程序运行的方式。特别是以下这些,PATH环境变量指定了某些函数,例如popen,搜索程序的目录列表;IFS指定了命令行解释器在解析命令行输入时将哪个字符视作空格;而LIBPATH则指定了寻找动态库的目录列表。所有这些环境变量都可以被恶意设置,欺骗特权程序去以提升了的权限运行恶意代码。为了避免这些问题,本书提供的源代码集中的telnetd程序的代码特别设计了一个函数,该函数会从用户提供的(不可信)环境中剔除可能会被误用的值(见图3-7)。这种方法被称为黑名单(blacklisting),在安全领域通常来说是一种不太合适的策略。因为在列出可能会被利用的元素时,很容易就会漏过一些。
<o:p> </o:p>
<!----><!----><!----><!----><!----><!---->不幸的是,telnetd实现就有这个问题,在相关的NetBSD安全建议中有所解释。例如,通过指定终端设置存在于某个文件中(而不是直接指定终端设置),攻击者可以欺骗系统泄漏某个本来应该不可读的文件的内容。这种情况下,较安全的方法是白名单(whitelisting),只允许设置确信安全的环境变量值。在telnetd的正确实现中综合使用了这两种方法,如图3-8所示。将TERMCAP的值设置为文件名是被明确禁止的(TERMCAP还有非常重要的合法用途),而且只有一小部分明确无害的变量被允许从远端设置。
<!----><!----><!---->环境变量并不是唯一能够导致安全问题的不可信数据源。它之所以在一些安全问题中特别突出,原因很简单,因为程序员们常常会忽略环境变量也是输入源这一事实。例如,任何来自于潜在的恶意用户或者不安全的网络连接的不可信输入都有可能导致安全问题。不过,没有经过充分验证的输入导致安全问题的典型情况是,输入的数据在后续处理中被用在重要的用途上。例如,IFS环境变量会修改命令行解释器的命令行解析过程,而LIBPATH变量则修改了动态库被加载的方式(这两个变量都是在运行时被解析的)。这种非直接的处理还应用于SQL语句、正则表达式、printf格式指定符、命令行解释器的各种命令以及HTML代码。
此类漏洞的典型例子就是基于SQL的注入攻击(injection attack),请看如下语句:
<o:p></o:p>
行身份鉴别,而这三者都很容易被人操纵和伪造,因此是绝对不能信任的。在检查操作此类数据的代码时,还是应该确认一下这些数据没有被用于身份鉴别,当然了,直接检查身份鉴别是如何进行的可能更容易一些。
练习3.10 检查dhclient的实现构造配置脚本的过程。对于所有依赖于服务器响应的脚本命令,解释攻击者可以如何利用它们来获得特权访问,以及现有实现是如何防卫此类攻击的。
练习3.11 引用特定的源代码路径,讨论伪造的DNS响应是如何被用来实现攻击的。
netbsdsrc/usr.sbin/dhcp/client。
本文仅供学习交流使用,严禁抄袭和转载,如果将本文内容用于商业用途,将追究法律责任!<o:p></o:p>
好书推荐,精彩明天继续······<o:p></o:p>
对于一位Developer而言,如何编写高质量的代码也许是一个永恒的话题,这是一门艺术,需要从实践中总结经验。下面我向朋友们推荐两本集大成之作,希望能对您有所启发!<o:p></o:p>
1.《修改代码的艺术》(原书名:Working Effectively with Legacy Code)<o:p></o:p>
<o:p> </o:p>
<!---->(1) <!---->修改代码的集大成之作<o:p></o:p>
<!---->(2) <!---->Amazon全五星图书<o:p></o:p>
<!---->(3) <!---->适用于各种语言或平台<o:p></o:p>
<!---->(4) <!---->著译双馨的佳作<o:p></o:p>
更多详细信息:http://www.china-pub.com/36363
<o:p></o:p>
2.《重构——改善既有代码的设计》(原书名:Refactoring: Improving the Design of Existing Code)
<o:p></o:p>
<!---->(1) <!---->修改代码的集大成之作软件开发的不朽经典<o:p></o:p>
<!---->(2) <!---->生动阐述重构原理和具体做法<o:p></o:p>
<!---->(3) <!---->新添大量重构方法,使你与时俱进<o:p></o:p>
<!---->(4) <!---->丰富的词汇和背景注释,助你轻松读经典<o:p></o:p>
<o:p> </o:p>更多详细信息:http://www.china-pub.com/37793
分享到:
相关推荐
可信计算技术在云计算安全中的应用是解决这些安全问题的重要途径。可信计算技术是云计算安全技术的新兴发展方向,它通过引入安全芯片或安全模块,构建安全的计算环境,以提供更加安全可靠的服务。可信计算的一个重要...
例如,在启动时,如果检测到个人计算机由于配置意外变化而不可信,那么在问题得到解决之前,访问高安全级别的应用程序可以被阻止。 远程证明是TPM的另一个重要特性。它允许在可信网络中的其他平台通过远程证明来...
**不可信内容重放防御**:沙盒机制还可以帮助抵御恶意重放攻击,保护用户免受不可信内容的影响。 **注意事项**:尽管沙盒属性提供了强大的安全功能,但由于其复杂性,开发人员可能会误解其用法或不当配置,反而削弱...
综上所述,通过在云计算模式下引入可信计算技术,特别是TPM的信任根机制,可以有效地解决云计算环境中的安全问题。这不仅提高了单个终端的安全性,还能够扩展到整个云计算网络,为用户提供更加可靠的服务。未来的...
文档内容主要围绕数据安全在智能国家背景下的应用和挑战,提出了安全多方计算(SMPC)作为解决方案,来应对数据的整合、聚合和分析过程中的隐私保护问题。 文件首先提出了一个核心问题:如何安全地将来自不同来源的...
标题与描述中提到的知识点是关于ActiveX控件在网页上的安全交互问题。这涉及到浏览器安全、ActiveX技术以及跨控件通信等多个方面。以下是对这些知识点的详细解析: ### ActiveX控件简介 ActiveX控件是一种由...
总之,虽然ChatGPT带来了革命性的自然语言处理体验,但其数据隐私和安全问题不容忽视。开发者、用户和监管机构都需要共同努力,通过技术和政策手段,平衡技术创新与用户隐私保护之间的关系,确保ChatGPT在提供便利的...
在解决问题的过程中,确保定期更新操作系统补丁,保持杀毒软件的更新,避免访问不可信的网站,这些都是预防电脑蓝屏的有效措施。同时,对于硬件故障,及时的维护和检查也是必不可少的。如果以上所有方法都无法解决...
在当今信息技术高速发展的时代背景下,云计算平台已经成为提供计算资源和服务的一种...通过综合考虑技术层面和管理层面的安全问题,我们能够更好地理解云计算平台面临的安全性威胁,并采取相应的措施来加以防范和解决。
为了解决这个问题,可以通过引入语言模型和上下文推理的方法来提高对含糊不清输入的识别和处理能力,以生成更准确、明确的回复。 4. 错误回答的处理 ChatGPT 技术在生成回复时,可能会出现一些明显错误的回答,这...
- **数据安全**:使用哈希算法保护密码、清理输入数据、确保所有连接使用SSL协议以及实施双因素认证等措施,都是保障数据安全的基础。 - **访问控制**:根据项目、子系统、设备类别甚至特定设备的级别进行细致的权限...
**解决方案**:为了避免此类安全问题,应该对URL中的参数进行严格的验证,确保所有输入都符合预期格式,并且不会导致任何潜在的威胁。 **4. VIEW STATE中的信息泄露** VIEW STATE是.NET框架中一个非常有用的功能,...
在生产环境中,建议采用更安全的方法来处理证书验证问题,例如将可信证书导入IDEA或系统的信任库中。 综上所述,当在IDEA中使用阿里云Maven镜像时,务必确保使用HTTPS协议,并妥善处理SSL证书验证问题,以保证项目...
总的来说,AI技术的应用为信息安全带来了新的可能性,尤其在数据安全和防范Android恶意软件方面。通过深入学习和特征工程,我们可以构建更智能、更适应未来威胁的安全系统,以保护个人和企业的数字资产。
然而,伴随着这些优势,ChatGPT也带来了显著的安全威胁。在学术界和产业界,对于ChatGPT的安全性问题的关注日益增加。主要的安全问题可以从用户层面和模型层面来分析: 1. **用户层面的安全问题**: - **隐私泄露*...
此外,论文还讨论了安全多方计算的理论基础,即在没有可信第三方的情况下,如何在多个不信任的参与者之间进行安全计算。在银行评估潜在借款人信用时,SMC使得它们能够获取其他银行关于同一客户的借贷信息,而不侵犯...
一个典型的安全漏洞例子是SQL注入攻击,这是由于将不可信的用户输入直接用于SQL语句的构造,而不进行适当的清洗和转义导致的。 由于Web应用程序的普及和广泛使用,它们面临着各式各样的安全威胁。在众多安全问题中...
Overdrive2k是一种基于Somewhat Homomorphic Encryption(部分同态加密)的高效安全多党计算(Secure Multiparty Computation,简称MPC)方案,旨在解决这些问题。 MPC的目标是在多个参与者之间进行计算,而无需...
总的来说,“无法验证发行者”的问题反映了Windows 7的安全策略,虽然可能带来不便,但其目的是保护用户安全。用户可以根据自身的需求和信任度选择合适的解决方案,但切记在降低安全设置的同时,也要提高警惕,谨慎...