污点检验

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

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

相关

  • 肠系膜缺血肠系膜缺血(Mesenteric ischemia)是描述因肠系膜的血液供应不足而造成的小肠损伤的情形。肠系膜缺血可分为急性及慢性。急性发病的常见症状为突然剧痛。患有慢性肠系膜缺血的
  • 樱井草樱井草(学名:Petrosavia sakuraii)为樱井草科樱井草属下的一个种。
  • 情夫情夫是已婚女性的男性婚外情人,尤其指被亿万富婆包养的一类,中国古代称面首,又俗称小白脸,主人翁,牛郎, 现在又有二公、二爷、小王的俗称(相当于情妇被称为“二奶”或当今俗称的“
  • 2007–082007-08赛季是NBA第62个赛季。常规赛从2007年10月28日持续到2008年4月16日。在季后赛中,波士顿凯尔特人4:2战胜洛杉矶湖人获得总冠军。
  • 罗讷-阿尔卑斯罗讷-阿尔卑斯大区是已被合并的法国大区,位于法国的东南部。下辖安省(01)、阿尔代什省(07)、德龙省(26)、伊泽尔省(38)、卢瓦尔省(42)、罗讷省(69)、萨瓦省(73)、上萨瓦省(74)。与普罗旺斯-阿
  • 亚德里安·布拉奥亚德里安·布拉奥(荷兰语:,1914年4月12日-2010年12月1日),荷兰天文学家。他的研究主要包括星团和恒星组合。1989年他获得了布鲁斯奖(Bruce Medal),第2145号小行星是以他的名字命名的
  • 黑珍珠黑珍珠可以指:
  • 直梗小檗直梗小檗(学名:)为小檗科小檗属的植物,为中国的特有植物。分布在中国大陆的四川等地,生长于海拔3,000米至3,200米的地区,常生长在高山灌丛和草坡,目前尚未由人工引种栽培。
  • 拉脱维亚第一党/拉脱维亚道路拉脱维亚第一党/拉脱维亚道路(拉脱维亚语:Latvijas Pirmā partija/Latvijas Ceļš, LPP/LC)是拉脱维亚政党,由两个基督教民主主义政党拉脱维亚第一党(LPP)与拉脱维亚之路(LC)、两
  • 统一可扩展固件接口统一可扩展固件接口(英语:Unified Extensible Firmware Interface,缩写UEFI)是一种个人电脑系统规格,用来定义操作系统与系统固件之间的软件界面,作为BIOS的替代方案。可扩展固件