污点检验

✍ dations ◷ 2025-02-24 01:45:53 #计算机编程,静态程序分析

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

相关

  • 运筹学运筹学(Operations Research,又被称作作业研究),是一门应用数学学科,利用统计学和数学模型等方法,去寻找复杂问题中的最佳或近似最佳的解答。运筹学经常用于解决现实生活中的复杂
  • 彩度色度指的是色彩的纯度,也叫饱和度或彩度,是“色彩三属性”之一。如大红就比玫红更红,这就是说大红的色度要高。它是HSV色彩属性模式、孟塞尔颜色系统等的描述色彩变量。从广义
  • 银杏类银杏是一类种子植物,最早出现在晚古生代早二叠世,在侏罗纪和早白垩世最为繁盛,此后逐渐衰落。现在,银杏(Ginkgo biloba)是银杏类植物的唯一成员。银杏类植物为高大多枝落叶乔木、
  • 河南巡抚河南巡抚,全称巡抚河南等处地方兼管河道提督军务,为明朝、清朝设置的负责河南地区的巡抚职位。
  • 斯兰岛斯兰岛(印尼语:Pulau Seram),又译为塞兰岛(Ceram、Seran或Serang),印度尼西亚马鲁古群岛主要岛屿之一,位于哈马黑拉岛以南,紧邻安汶岛,属马鲁古省管辖,分属三个县:自西向东分别是西斯兰
  • 中华人民共和国通信中华人民共和国拥有一个多样化的通信系统,连接该国所有地区的互联网、电话、电报、电台和电视台。其通讯格式并不是西方国家常见的高级格式,但是它的通讯系统包含了世界最尖端
  • 引发体引发体(Primosome)是在DNA复制重启 (DNA replication restart) 的途径中所形成之核蛋白,此核蛋白能够将复制型螺旋酶重新导入复制重启位置。目前引发体仅在原核生物中发现,而真
  • 北镇中学北镇中学是山东省滨州市滨城区的一所中学,创建于1952年,是山东省重点中学。:山东省北镇中学:北中: 明志、勤奋、求实、创新: 胸怀大爱,奉献大智,培育大材,涵养大气,担当大任,成就大业:邱
  • 罗宾·科克罗宾·科克(Robin Cook,1940年5月4日-),美国医生兼小说家,生于美国纽约。罗宾·科克写作主题是医学以及公共卫生,多部作品曾登上《纽约时报》畅销书榜,作品总销量超过4亿份。罗宾·
  • 舍林大街站舍林大街站(德语:U-Bahnhof Schillingstraße)是柏林地铁的是柏林地铁地铁5号线的一座车站。其位于卡尔·马克思大道下方。站名源自于附近的舍林大街。