污点检验

✍ dations ◷ 2025-08-21 07:53:06 #计算机编程,静态程序分析

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

相关

  • 亨利定律亨利定律,是由威廉·亨利所发现的一个气体的定律。这个式子说明在常温下且密闭的容器中,溶于某溶剂的某气体之体积摩尔浓度,会正好与此溶液达成平衡的气体分压成正比。亨利定律
  • 角膜后沉积物角膜后沉积物(keratic precipitate),在角膜内表面的点状沉积物,可以通过裂隙灯看到。KP的出现有两个必要条件:也就是说,KP的出现前提是有眼内炎症的发生。正常的眼睛或者只有外
  • 圣可以指:前者例子:圣人,圣旨,圣像;后者例子:茶圣,武圣
  • 北高加索联邦管区北高加索联邦管区(俄语:Се́веро-Кавка́зский федера́льный о́круг,罗马化:Severo-Kavkazsky federalny okrug),位于俄罗斯西南部的北高加索
  • 黄芩属黄芩属(学名:Scutellaria)是唇形科下的一个属,为草本或亚灌木植物,少数为灌木植物,匍匍上升或披散至直立。该属共有约300余种,分布于全世界。其中黄芩(S. baicalensis)为传统中药材。
  • 阿佛菌素阿维菌素(英语:Avermectin)是一种十六元大环内酯衍生物,作为强力的驱虫药和杀虫剂使用。阿维菌素是一种天然化合物,由链霉菌(Streptomyces avermitilis)发酵产生,这是一种土壤放线菌
  • 班达群岛班达群岛是印度尼西亚马鲁古省位于班达海的群岛,由10个小型火山岛组成,位于斯兰岛以南140公里、爪哇岛以东2,000公里,土地总面积约180平方公里,人口约15,000,是水肺潜水和浮潜的
  • 电网输电网络(英语:Electrical grid),又称电网,是一种用于互相连接供应端与用户端的供电的电力系统。输电网络主要由以下列三个部分所组成。由于各发电厂通常处于偏远地区,为了将其产
  • 寻血猎犬寻血猎犬(Bloodhound)是一种大型嗅觉猎犬。寻血猎犬最初以狩猎鹿和野猪为繁殖目的,而且从中世纪起还用于跟踪人类,现在大部分专门用于跟踪。寻血猎犬是圣休伯特在比利时饲养猎犬
  • 黄米面炸糕黄米面炸糕是以水磨米面为皮,以豆沙为馅,油炸成的食品。面加水和好后发酵,揉进一点碱。制作时在面团中间按一个坑儿,包进豆沙馅,封严,入温油锅中炸至金黄色。炸糕