污点检验

✍ dations ◷ 2025-07-06 01:51:23 #计算机编程,静态程序分析

污点检验是某些程序语言所拥有的特性,例如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上实现数据污点化。然而,自从客户端支持被当作实验性功能,该功能被禁用(要求用户手动激活),而且需要页面作者修改脚本才能使用。而其他浏览器从未实现这个功能,通讯服务器也没有大体完成,微软后来成了新的互联网信息提供商。

相关

  • 亚里斯多德亚里士多德(希腊语:Αριστοτέλης,Aristotélēs,前384年6月19日-前322年3月7日),古希腊哲学家,柏拉图的学生、亚历山大大帝的老师。他的著作牵涉许多学科,包括了物理学、形
  • 细胞分裂系列细胞分裂(英语:Splinter Cell,港台译作“纵横谍海”)是一系列以美国作家汤姆·克兰西冠名的电子游戏和小说。主角山姆·费舍尔(英语:Sam Fisher)是一个训练有素的国安局黑色作战分
  • 种族隔离种族隔离(英文:Racial segregation),指在日常生活中,按照不同种族将人群分割开来,使得各种族不能同时使用公共空间或者服务。种族隔离可能是法律规定的,也可能是无法律规定但事实存
  • 风向袋风向袋或风锥是一个圆锥形纺织管,旨在表明风向和风速。风向袋通常是用在机场,或有气体泄漏危险的化工厂。他们有时是坐落在公路两旁当风的位置。风向袋所表示的风向是与风向袋
  • 自决自决可以指:
  • 刘易斯和克拉克率领的探险队刘易斯与克拉克远征(英语:Lewis and Clark expedition,1804年5月–1806年9月)是美国国内首次横越大陆西抵太平洋沿岸的往返考察活动。领队为美国陆军的梅里韦瑟·刘易斯上尉(Meri
  • 锡袍锡袍(缅甸语:သီပေါမင်း,缅甸语委转写:;1859年1月1日-1916年12月19日)是缅甸贡榜王朝的末代国王。1878年10月1日至1885年12月29日在位。锡袍在位期间,英国人的势力已经控制
  • 郭世英郭世英(1942年-1968年),郭沫若与于立群之子,出生于重庆。曾就读于北京101中学。
  • 安徽美术出版社安徽美术出版社是一家成立于1984年10月的美术出版社,由安徽人民出版社美术编辑部扩建,隶属于时代出版传媒股份有限公司(原安徽出版集团)。ISBN代码为978-7-5398。2009年被新闻出
  • 分布式锁分布式锁,是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么