如何解决不可信输入带来的安全问题

2023-11-04

《高质量程序设计艺术》样章连载——3.5 不可信输入


原书名:Code Quality: The Open Source Perspective

<o:p></o:p>

1.         深入剖析著名开源软件的质量问题<o:p></o:p>

2.         全面阐述CC++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[1])。这种方法被称为黑名单blacklisting),在安全领域通常来说是一种不太合适的策略。因为在列出可能会被利用的元素时,很容易就会漏过一些。



[1] netbsdsrc/libexec/telnetd/sys_term.c:1855-1868

<o:p> </o:p>

不幸的是,telnetd实现就有这个问题,在相关的NetBSD安全建议[1]中有所解释。例如,通过指定终端设置存在于某个文件中(而不是直接指定终端设置),攻击者可以欺骗系统泄漏某个本来应该不可读的文件的内容。这种情况下,较安全的方法是白名单whitelisting),只允许设置确信安全的环境变量值。在telnetd的正确实现[2]中综合使用了这两种方法,如图3-8所示。将TERMCAP的值设置为文件名是被明确禁止的(TERMCAP还有非常重要的合法用途),而且只有一小部分明确无害的变量被允许从远端设置。

环境变量并不是唯一能够导致安全问题的不可信数据源。它之所以在一些安全问题中特别突出,原因很简单,因为程序员们常常会忽略环境变量也是输入源这一事实。例如,任何来自于潜在的恶意用户或者不安全的网络连接的不可信输入都有可能导致安全问题。不过,没有经过充分验证的输入导致安全问题的典型情况是,输入的数据在后续处理中被用在重要的用途上。例如,IFS环境变量会修改命令行解释器的命令行解析过程,而LIBPATH变量则修改了动态库被加载的方式(这两个变量都是在运行时被解析的)。这种非直接的处理还应用于SQL语句、正则表达式、printf格式指定符、命令行解释器的各种命令以及HTML代码。

此类漏洞的典型例子就是基于SQL的注入攻击(injection attack),请看如下语句:[3]



[1] ftp://ftp.NetBSD.org/pub/NetBSD/security/advisories/NetBSD-SA2000-017.txt.asc

[2] ftp://ftp.NetBSD.org/pub/NetBSD/misc/security/patches/20001220-krb

[3] hsqlbd/src/org/hsqldb/jdbcDatabaseMetaData.java:2946


<o:p></o:p>

行身份鉴别,而这三者都很容易被人操纵和伪造,因此是绝对不能信任的。在检查操作此类数据的代码时,还是应该确认一下这些数据没有被用于身份鉴别,当然了,直接检查身份鉴别是如何进行的可能更容易一些。

练习3.10  检查dhclient的实现[1]构造配置脚本的过程。对于所有依赖于服务器响应的脚本命令,解释攻击者可以如何利用它们来获得特权访问,以及现有实现是如何防卫此类攻击的。

练习3.11  引用特定的源代码路径,讨论伪造的DNS响应是如何被用来实现攻击的。

[1] 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

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决不可信输入带来的安全问题 的相关文章

随机推荐

  • Raspberry Pi运行Arduino Sketch

    在本文中 您将学习如何在Raspberry Pi上运行为Arduino编写的sketch 这将使我们能够将Arduino代码编译为可以在Raspberry Pi上运行的二进制文件 但是在我们这样做之前 我们必须在Arduino IDE和Ra
  • 剑指Offer第五十九题:按之字顺序打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树 即第一行按照从左到右的顺序打印 第二层按照从右至左的顺序打印 第三行按照从左到右的顺序打印 其他行以此类推 思路 1 第一种按照层序遍历 然后偶数行 默认从第一行开始 翻转即可 层序遍历和翻转可
  • iOS并发编程(一)-简介

    一个菜鸟的自我修养 就是在低级职位上不抓狂 当一个优秀的菜鸟 就是为了有一天不当菜鸟 瞅准机会迅速脱离菜鸟轨道 然后一路飞翔到世界的尽头 接下来系统的学习下并发编程 会有几篇吧 不多说 走起 简介 1 异步设计方式 传统并发编程模型是线程
  • 三分钟看懂Python分支循环规范:if elif for while

    人生苦短 我用python 分支与循环 条件是分支与循环中最为核心的点 解决的问题场景是不同的问题有不同的处理逻辑 当满足单个或者多个条件或者不满足条件进入分支和循环 这里也就说明这个对相同问题处理执行逻辑依据具体参数动态变化 由此产生多种
  • linux环境安装工具

    安装mysql http istester com article 258 html 安装git https wx zsxq com dweb2 index group 88512425825412 from mweb type detai
  • java批量生成二维码图片,并打包成ZIP

    最近开发遇到了一个批量打印二维码并生成zip包的需求 先记录下来 pom依赖
  • MySQL(免安装版)的安装与配置详细教程及相关问题解决办法、开启远程连接

    免安装版的Mysql MySQL关是一种关系数据库管理系统 所使用的 SQL 语言是用于访问数据库的最常用的标准化语言 其特点为体积小 速度快 总体拥有成本低 尤其是开放源码这一特点 在 Web应用方面 MySQL 是最好RDBMS Rel
  • 小程序设计规范(一)

    小程序设计规范 标签 相比APP而言 开发一款小程序的开发成本更低 周期更短 同时开发难度和维护成本也相对降低 因此越来越多的开发者开始入坑小程序 正好最近我也要开发小程序 所以今天我就从设计方面聊一聊微信小程序设计规范 埋上设计中可能会出
  • CTP:报单错误:不允许重复报单(原因及解决方案)

    CTP 报单错误 不允许重复报单 原因及解决方案 使用QT5 10 上期的CTP平台开发了一整套程序化交易系统 开发的过程中遇到了各种各样的问题 其中关于CTP接口的开发就遇到了很多坑 甚至很多坑是经过了一段时间的实盘测试才能被发现 本文所
  • python中斐波那契数列_斐波那契数列–在Python,JavaScript,C ++,Java和Swift中进行了解释...

    python中斐波那契数列 by Pau Pav n 通过保罗 帕文 PauPav n The Fibonacci sequence is by definition the integer sequence in which every
  • 学习梦想家CMS内容管理系统-模板的使用

    准备网站下载器 网上可以自己百度搜索 我使用的这个工具就是HTTrack Website Copier 通过这个工具完成一个网站的获取 主要是获取静态文件 这里需要自己去分析这个静态文件 我们获取到的页面主要是需要css images js
  • linux 命令:ping、fping、gping、hping3、tracert、traceroute

    From Nmap Netcat Hping3工具对比 http www 2cto com article 201210 158961 html hping3 命令 http man linuxde net hping3 示例 Testin
  • 2023年最热门的网络安全行业岗位分析

    前言 大数据 人工智能 云计算 物联网 5G等新兴技术的高速发展 蒸蒸日上 但是随之也出现了许多问题 比如 政府单位 企业 个人信息泄露 网络安全问题日益严峻 网络空间安全建设刻不容缓 网络安全人才需求量巨大 人才缺口高达95 人才输送与人
  • m = (++i)+(++i)+(++i) 问题

    m i i i 问题 问题描述 m i i i i初始值为1 求m计算结果 解析 计算机在计算m a b c d e f 先计算 a b c d 并把结果存储 例如 存储在j中 然后再计算j e f j 所以计算机先计算了两个 i 前两项i
  • SpringBoot+Netty实现WebSocket服务器

    前言 传统的请求 应答模式 http 越来越不能满足现实需求 服务器过于被动 而采用轮训或者long poll的方式过于浪费资源 这便有了WebSocket WebSocket是HTML5出的东西 协议 也就是说HTTP协议没有变化 或者说
  • 闲鱼x-sign参数

    据说淘宝的x sign程序已经人手一份了 闲鱼的好像不太多 最近研究了下闲鱼以x sign为代码的请求参数 包括x sign x mini wua x umt等等参数 效果如下 可以看到基本的请求参数和请求包数据都已经在里面了 上面的是po
  • 【React】react 性能优化的方式有哪些

    文章目录 1 Reac memo 缓存组件 2 使用 useMemo 缓存大量的计算 3 避免使用 内联对象 4 避免使用 匿名函数 5 延迟加载不是立即需要的组件 6 调整CSS而不是强制组件加载和卸载 7 使用React Fragmen
  • 两台虚拟机互相ping通(互相通讯)

    要是两台虚拟机能够PING通下列要求缺一不可 1 你所设置的虚拟网络的网络号不能跟外面你正在使用的真实的网络号一样 2 防火墙必须关闭 ubuntu命令 ufw disable 3 你设置的那俩台虚拟机必须在同一网段内 同一网段类似192
  • Ubuntu终端以及浏览器连接不上Github的解决办法

    项目场景 在安装一些其他库时 按照官网教程的步骤 其中需要利用ssh或者https方式从github克隆一些资源 问题描述 从github克隆下载资源会等待很久并且最后提醒失败 原因分析 网络原因 解决方案 用到的网站 站长工具 站长之家
  • 如何解决不可信输入带来的安全问题

    高质量程序设计艺术 样章连载 3 5 不可信输入 原书名 Code Quality The Open Source Perspective