污点检验

✍ dations ◷ 2025-09-10 13:50:29 #计算机编程,静态程序分析

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

相关

  • 真空包装真空包装是用于将物品放入,并具有高气密性的塑胶或铝箔袋内包装封口,可隔绝气体、液体、日光进入和高度抗韧性。通常情况下需要配合真空包装机一起使用。主要原理是将包装容器
  • 詹姆斯·约瑟夫·西尔维斯特詹姆斯·约瑟夫·西尔维斯特(英语:James Joseph Sylvester,1814年9月3日-1897年3月15日),英国数学家和律师。西尔维斯特从1833年开始在剑桥大学圣约翰学院就读,但由于他是犹太人他
  • 星际尘埃宇宙尘(英语:Cosmic Dust)是由众多细小粒子组成的一种固态尘埃,自宇宙大爆炸起,便四散在浩瀚宇宙之中。宇宙尘的组成包含硅酸盐、碳等元素以及水分,部分来自彗星、小行星等星体的
  • 冠状动脉阻塞冠状动脉阻塞(coronary occlusion)是指冠状动脉部分或是全部的阻塞,因此影响血液的流动,可能会导致心肌梗死。有些冠状动脉阻塞的症状不明显,可能只是轻微的疼痛、紧张感或是不适
  • 隆胸隆胸是一种乳房整形手术,包括将乳房植体植入乳房内,或是自体脂肪移植的乳房整型,目的是为了增加乳房大小、调整乳房形状及质感。在重建(英语:Reconstructive surgery)整形中,隆胸可
  • 盐的历史文明建立在用食盐储藏食物的基础上。可以腌制储存食物以后,人类饮食对季节的依赖大大降低,也给长途旅行提供了条件。在漫长的历史中,食盐很难制取,也因此被当做珍贵的贸易物资。
  • 拉普拉塔联合省阿根廷  乌拉圭  玻利维亚  巴西拉普拉塔联合省(西班牙语:Provincias Unidas del Río de la Plata)也称南美洲联合省(西班牙语:Provincias Unidas en Sud-América)是阿根廷独
  • 第二圣殿第二圣殿,旧址位于耶路撒冷,是继第一圣殿被毁后所建的。前586年,犹太人被新巴比伦王国国王尼布甲尼撒掳往巴比伦,沦为巴比伦之囚,第一圣殿被毁。后新巴比伦被波斯帝国的古列二世
  • 2015年黎巴嫩抗议2015年黎巴嫩抗议,是指2015年8月起,在黎巴嫩所发生的一系列抗议事件。最初抗议的起因是在7月时,当局关闭了垃圾掩埋场之后,垃圾无法有效处理的问题形成危机,并蔓延到全国。示威者
  • 勒内·卡米尔莱昂·弗朗索瓦·勒内·卡米尔(法语:Léon François René Carmille,1886年1月8日-1945年1月25日)是一名20世纪初的穿孔纸带计算机专家与法国陆军审计员(英语:comptroller)负责人。