污点检验

✍ dations ◷ 2025-12-10 12:55:19 #计算机编程,静态程序分析

污点检验是某些程序语言所拥有的特性,例如Perl和Ruby,可用于增加安全性和避免恶意用户在主机上执行命令。污点会检验突出的安全风险,一般来说这些风险与那些使用SQL注入或缓冲区溢出攻击的网站相关。

污点检验的原理是任何变量(例如在网页表单区域的一个变量集)能够被外部用户修改,从而造成了潜在的安全危险。如果该变量被一个表达式赋值给第二个变量,那么第二变量也是可疑的。污点检验工具在变量间传递运行,直到外部输入潜在地影响到所有的变量。如果这些变量中任何一个变量被用于执行危险命令(例如对SQL数据库或主机操作系统的直接命令),污点检检验工具将警告该程序正在使用有潜在危险的污点变量。程序员可以通过重新设计程序来避免因危险的输入而导致的安全问题。

污点检验能够被视为一个无界面全面验证的保守近似或者是更一般化的安全信息流概念。因为系统中的信息流不能通过检验一个简单的执行追踪而被验证,污点分析的结果将必然地反映关于该系统信息流特征的近似信息。

以下危险的Perl代码在没有检验$name变量的值情况下,启动了一个大型SQL注入漏洞:

#!/usr/bin/perlmy $name = $cgi->param("name");  # Get the name from the browser...$dbh->TaintIn = 1;$dbh->execute("SELECT * FROM users WHERE name = '$name';"); # Execute a SQL query

如果开启污点检验,那么Perl将会拒绝运行命令,显示错误信息并退出,因为一个污点变量正在SQL查询中被使用。没有污点检验,用户能进入foo'; DROP TABLE users --,因此运行命令将删除全部的数据库表。更安全的方法是将$name的污点值编码到一个SQL字符串字面值和使用SQL查询的结果,这保证了没有嵌入在$name的危险命令会被执行。另一方法是使用预处理语句去净化所有变量输入。

需要注意的是Perl DBI需要设定数据库句柄的TaintIn属性,才允许污点模式去检验该SQL字符串。

Perl从至少1989年当T switch加入到Perl 3的时候开始支持污点化。

在1996年,网景同时在网景通讯服务器的服务器端JavaScript和客户端的网景浏览器3上实现数据污点化。然而,自从客户端支持被当作实验性功能,该功能被禁用(要求用户手动激活),而且需要页面作者修改脚本才能使用。而其他浏览器从未实现这个功能,通讯服务器也没有大体完成,微软后来成了新的互联网信息提供商。

相关

  • 染色质染色质(英语:Chromatin,或称核染质)是在细胞中发现的大分子复合物,由DNA,蛋白质和RNA组成。它也是构成染色体的结构。染色质的主要功能是1)将DNA包装成更紧凑,更致密的形状; 2)增强DN
  • 妓女娼妓,又称妓女、婊子、窑姐,是一种以提供陪伴及娱乐(其目的可能包括肉体上的满足)为主的行业。传统上许多娼妓以奉客、陪客喝酒解苦、表演为主,具有较高的艺术素养,即“卖艺”不“
  • 无产阶级无产阶级(拉丁语:proletarius),或意译为劳动阶级,或半音译为普罗阶级,其拉丁文本字原是指古罗马最低下层的社会阶级,字源由Proles(子嗣)一字所衍生,意味该阶层的唯一贡献是延续香火并
  • 拉丁语名词拉丁语的名词一般有六个格:主格、呼格、属格、予格、宾格、夺格,同时名词还分成三个性别:阴性、阳性和中性;少数地理名词还可以有方位格。拉丁语句子的意思几乎完全由名词变格而
  • 七鳃鳗属七鳃鳗属(学名:),是七鳃鳗目七鳃鳗科的一属。该属的分类:
  • 塞萨尔·巴尔达奇尼塞萨尔·巴尔达奇尼(法语:César Baldaccini,1921年1月1日-1998年12月6日),法国现代雕塑家。他的青铜作品同时融合了两项现代雕塑的元素:承袭自传统的雕塑品质及组合技法,后者尤为塞
  • 杰雷米·乔丹杰雷米·麦可·乔丹(英语:Jeremy Michael Jordan,1984年11月20日-)是美国的一位演员。出生在得克萨斯州,并在2012年结婚。
  • 汉斯·许蒂希汉斯·许蒂希(德语:Hans Hüttig;1894年4月5日出生于德累斯顿-1980年2月23日逝世于瓦亨海姆)是德国军官及纳粹集中营指挥官。汉斯·许蒂希出生于1894年4月5日,他的父亲出身木匠家
  • 血红密孔菌血红密孔菌,属多孔菌科一种,是木栖腐生的中小型菇类,该菇类生长于如台湾等地之低中海拔林区,生长期间约是在春夏两季之间。该种菇类最大特色是烘干加工后可治疗上呼吸道感冒。
  • 新印加国新印加国是印加帝国被西班牙人征服后的一个残存部分,也是一些抵抗西班牙统治的印加人的最后据点。萨帕·印卡曼科·卡帕克二世于1537年在比尔卡班巴建立新印加王国,直到1572年