污点检验

✍ dations ◷ 2024-10-18 22:29:38 #计算机编程,静态程序分析

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

相关

  • 梭状回梭状回(Fusiform gyrus)是颞叶与枕叶一部分,在布罗德曼分区系统为37区。也被称作“枕颞内侧回”(discontinuous occipitotemporal gyrus)。位于颞下回与海马旁回之间。 梭状回的
  • 华人华人界诺贝尔奖得主列表,列举了不同意义上的华人,海外华人,在中国出生者或持有/曾经持有中华民国/中华人民共和国国籍的诺贝尔奖得主列表。诺贝尔奖,是一年一度的国际性奖励,其中的
  • 圣地佛教圣地是指佛教的圣地,佛教三大传承都有各自的圣地。佛教起源于印度,遍布东南亚、南亚地区,故这一大片地区的佛教故地很多,部分还是佛陀住世时期,安住、宣法、巡游时的圣地,其中
  • 异恶唑
  • 玉泉玉泉可以指:
  • 王世杰王世杰可以指:
  • 麻州麻州,唐朝时设置的州。贞观二十二年(648年)析郎州置,治所在今云南省宣威市。属戎州。辖境相当今云南省乌蒙山南段东南,革香河流域一带。后废。
  • 最佳食用日期最佳食用日期(英语:Best before),也称赏味期限、最佳赏味期、此日期前最佳,是食品制造商或包装商为其食品或饮品所标示的一个日期,告知消费者在哪个日期之前能保持其产品的质素。
  • 2012年夏季奥林匹克运动会划船男子单人双桨比赛2012年夏季奥林匹克运动会划船比赛的男子单人双桨项目于2012年7月28日至8月3日在多尼湖举行。所有时间为英国夏令时间 (UTC+1)
  • 斯匹次卑尔根岛斯匹次卑尔根岛或史匹兹卑尔根岛(挪威语:Spitsbergen)是挪威所属斯瓦尔巴群岛中最大的岛屿,靠近北极。该岛面积约39,044 km²。斯匹次卑尔根岛长约450 km,40-225公里宽。由于纬