范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

学习一个PHP中用于检测危险函数的扩展Taint

  在日常的开发中,安全性一直是我们要研究的重点内容之一。而在安全性中,最主要的一点就是我们的输入数据。所有的攻击和越权,都是从一个不经意间遗留的请求漏洞发生的。当然,现在很多框架已经为我们解决了大部分的安全性问题,但百密一疏,总会有意想不到的地方忘了加过滤或者遗漏了某些验证。今天我们要学习的这个扩展就是为我们解决这种问题而诞生的。 什么是 Taint
  上篇文章中就得到过,我们还要介绍一个鸟哥的扩展工具,Taint 这个扩展就是鸟哥大神的作品之一。不过这个扩展是不推荐安装在生产环境的,它主要的战场是在我们的测试环境中使用。它的主要功能就是如果我们使用了未经处理的 $_GET 、 $_POST 、 $_COOKIE 之类的变量,就会报出警告信息。注意,只是警告,而不是错误或者异常。一般在线上环境我们都会习惯性地关掉警告信息的报错,所以这个扩展在线上的功能有限。
  扩展的安装非常简单,下载对应的扩展然后进行普通的扩展安装即可,不需要额外的其它操作系统中组件的支持。对于这个扩展的详细信息,可以参考文末第二条链接中鸟哥文章的说明。 怎么用?
  php.ini 中打开扩展,然后设置 taint.enable = 1 。就正式启用这个扩展了。然后我们通过代码来测试。 $a = $_GET["a"]; $file_name = "/tmp" .  $a; $output    = "Welcome, {$a} !!!"; $var       = "output"; $sql       = "Select *  from " . $a;  echo $a, "
  "; // Warning: main() [echo]: Attempt to echo a string that might be tainted in /data/www/blog/taint/1.php on line 10  echo $output, "
  "; // Warning: main() [echo]: Attempt to echo a string that might be tainted in /data/www/blog/taint/1.php on line 12  print $var; echo "
  "; // Warning: main() [print]: Attempt to print a string that might be tainted in /data/www/blog/taint/1.php on line 14  include($file_name);echo "
  "; // Warning: main() [include]: File path contains data that might be tainted in /data/www/blog/taint/1.php on line 16  mysqli_query(null, $sql);echo "
  "; // Warning: main() [mysqli_query]: SQL statement contains data that might be tainted in /data/www/blog/taint/1.php on line 18
  我们使用 php -S 来调试这个测试文件,当访问这个测试文件并且带上 a 参数之后,就可以看到下面的这些操作都会报出警告信息。未经过滤的这个 $a ,不管是拼接到字符串中,还是作为可变变量,只要是通过 echo 、 print 、 include 或者是 mysqli_query() 这些函数调用后,都会马上出现报警,提示你使用的这个数据字符串是需要进行过滤的。taint 的意思是 污点 。might be tainted 也就是有污点内容的意思。
  大部分输出或者操作数据库之类的函数都会报出这些警告,这些内容的具体信息可以在官方文档中查询到。
  我们还可以通过一个判断函数来验证一个变量中是否包含这类未处理的数据。 var_dump(is_tainted($var)); // bool(false)  echo "
  "; var_dump(is_tainted($output)); // bool(true)  echo "
  "; 怎样不报警?
  怎样不让它报警?那当然就是对数据进行处理啦。 $output    = "Welcome, ".htmlentities($a)." !!!"; echo $output, "
  ";  $sql       = "Select *  from " . mysqli_escape_string(null, $a); mysqli_query(null, $sql);echo "
  ";
  在输出的时候进行 html 编码一下,对应的就是 XSS 攻击的防范。在数据库操作的时候 escape 一下,对应的就是处理掉 SQL 注入的攻击。使用了这些处理函数对数据进行安全性处理之后就不会报警告信息了。
  由此可以看出,这个扩展确实是我们在日常开发调试中,特别是测试环境中的好帮手。就像前面所说的,总会有遗漏和遗忘的地方,通过这个扩展让程序来自动发现这些内容,对于我们开发的安全来说就能够有非常大的提高。 检测及转换函数
  最后在 Taint 扩展中,还提供了两个函数用于强制进行警告和解除警告的作用,当然,也是为了我们在测试环境中的调试方便。 $newOutput = "Welcome !!!"; echo $newOutput, "
  "; var_dump(taint($newOutput)); // bool(true)  echo $newOutput, "
  "; // // Warning: main() [echo]: Attempt to echo a string that might be tainted in /data/www/blog/taint/1.php on line 39  $newOutput = "Welcome {$a} !!!";  echo $newOutput, "
  "; // Warning: main() [echo]: Attempt to echo a string that might be tainted in /data/www/blog/taint/1.php on line 42 var_dump(untaint($newOutput)); // bool(true)  echo $newOutput, "
  ";
  taint() 函数可以让一个正常的语句报出警告。而 untaint() 则可以让一个本身应该报警的数据不报警。 总结
  同样还是非常小众的扩展,但是学习了之后发现还真的是挺有用的,而且特别适合在我们的测试环境中向大家提供一个全面检测安全质量的报警系统。就像文中一直强调的那样,对于中大型的项目开发来说,遗漏是不可避免的,即使有完善的 code review 机制,但也总会有所有人都遗漏的漏洞存在。通过程序的方式来检验自然是最好不过的,大家可以多多尝试一下。
  测试代码:
  https://github.com/zhangyue0503/dev-blog/blob/master/php/2021/02/source/1.学习一个PHP中用于检测危险函数的扩展Taint.php
  参考文档:
  https://www.php.net/manual/zh/book.taint.php
  https://www.laruence.com/2012/02/14/2544.html

还记得这些手机的型号吗?还有朋友用过这些手机的吗?现在拿出来看看,回想一下当年留下的记忆吧!这手机应该有十几年了,按键都掉了还记得三星的手机吗以前有一台手机用已经很有面子的了,以前一部手机可以用几年,又省聊一款表里如一的低调游戏本一提到惠普游戏本,大家的第一反应可能是暗影精灵系列,但其实惠普游戏本阵营有两大系列暗影精灵和光影精灵。相比于暗影,光影精灵系列要低调得多,造型商务内敛,不搞杀马特RGB,今年还换了十大最有价值的手机,全都是古董1973年4月3日,位于纽约曼哈顿的摩托罗拉实验室里爆发出一阵阵掌声。我们成功了!研究团队的领导者马丁库帕举着他们的研究成果世界上第一部手机。它的诞生意味着一个新时代的开始无线通信闭着眼都能选的手机,目前这4部手机最值得考虑,你会怎么选?闭着眼都能选的手机,目前这4部手机最值得考虑,你会怎么选?第一部小米MIX4新发布的小米MIX4手机,你们看了没有?不得不说还是非常惊艳的,有两点让我也无法抗拒。第一点就是实现了真摩托罗拉两款手机发布1亿像素摄像头加持2021年8月6日,根据多家科技媒体的消息,摩托罗拉在上海举行新品手机发布会,正式发布了旗下edge两款新机,分别为edgespro和edges轻奢版。其中,对于摩托罗拉edges今年小米手机汇总小米MIXFOLD售价9999MIXFOLD小米折叠屏手机5G2K折叠屏骁龙888一亿像素哈曼卡顿立体声四扬声器12GB256GB黑色游戏手机,三月上市小米11Ultra小米11U小米MIUI12。5开始推送,推送的型号有你的手机吗近日,小米手机开始全新的MIUI小部件内测征募,官网表明,这次将让负一屏和手机桌面面目一新。据内测征募数据表明,MIUI小部件将新增加好几个基本功能全新的网格机制新增加224244小米,在东南亚智能手机市场也超越三星电子小米小米在欧洲取得出色的成绩Canalys,出货量增加107,占据22的市场份额,三星19小米在东南亚智能手机市场上首次超过三星电子成为龙头企业。国内媒体援引市场调查企业Canal电商时代已成过去式?未来有哪些发展模式?最近十几年,对我们的生活产生巨大的改变应该就是互联网时代了。互联网的普及与发展造就新生了很多互联网产业,其中电商的整体规模也是非常大。马云创立的阿里巴巴毫无疑问是电商行业里头的领头更懂你的智能手表三星GalaxyWatch4图赏三星不但发布了折叠屏手机新品,还带了GalaxyWatch4搭载由三星与谷歌深度合作的WearOStrade操作系统。搭载BioActive身体活力传感器,可以测量血氧水平,还能够TikTok被评为2020年下载量最大的应用英国BBC根据数字分析公司AppAnnie的数据,TikTok是2020年全球下载量最大的应用程序,因为它从FacebookMessenger中夺得头把交椅。这个中国视频分享平台是
核心处理器翻倍支持光追,RTX3060大幅领先GTX1660ti事实上两款显卡定位基本差距不大,售价也就一千左右的差距。如果考虑性能优势,RTX3060还是不错的选择,四千打三千,这1。5倍左右的性能提升值了。参数上,主要是流处理器数量上RTX2021美国家用路由器满意度报告出炉华硕排名第一根据JDPower的最新客户满意度数据,大部分美国人对家中的无线路由器都表示满意。最新调查发现,2021年美国客户对路由器的满意度为884分,高于2020年的826分。该类别中最大假如现在发明出速度达到一秒一光年的飞行器,能发现宇宙的边缘吗?1秒钟就能飞1光年,对于星系来说是一个很快的速度。然而对于宇宙来说,依旧是小菜一碟,更重要的是,宇宙的边缘完全是个未知的世界。1秒1光年,能找到太阳系边缘?火星到地球的平均距离大约论题好朋友用攒了一年的零花钱买了一个智能手机,并悄悄带到宿舍玩,班主任来询问情况,要不要说实话?听你说有班主任,那估计是学校了,确实很多学校是不允许带手机的,这样也好,能全身心地投入学习,不会因为手机而分心。虽说手机现在普及的不能再普及了,上到九十九,下到刚会走,有部手机都不十多年前国内的三大杀毒软件瑞星江民和金山毒霸的现状如何?瑞星杀毒软件是瑞星公司与2011年推出的一款永久免费软件产品,宣传力度特别大,成为了普遍拥有电脑者的心中最强的杀毒软件。江民国家认定的高新技术企业,国内知名的计算机反病毒软件公司,石油是如何形成的?石油是古生物形成的吗?我认为古生物其分子为碳水化物,而油,气也是,古生物降解合成的油,气为在最浅层,量为少数,深层大量的油,气,煤炭皆由地核自身合成,一千米以下的地油气就是一个证据(自身合成)以前我说过苹果自研处理器那么牛,为什么不卖处理器?文小伊评科技苹果自研的处理器厉害不厉害?他确实很厉害。苹果M1芯片Firestorm大核心的IPC(CPU每个时钟周期内部所执行的指令数量,也称作同频性能,是衡量一款处理器性能的核爱钱进确定立案,我投的20万能拿回来吗?最近,北京经侦终于开始对P2P平台有所行动了!针对爱钱进到期不退钱的问题,公安机关已经立案调查该平台,相关部门将严格按照司法处置程序进行处理。平台数据显示,爱钱进待收的本息金额累计如果中国有五家像华为这种级别的企业,会怎么样?五家华为级别的公司,那厉害了。2018年,营业收入超过华为的公司,A股上市的只有8家,非上市公司也只有电网,烟草公司可以达到华为的营业收入水平。上面图中的营业收入,技术含量与华为差修改微信号有什么好处?微信号可以修改,等于给了我们一个大大的后悔药。因为微信使用的频次实在是太高了,很轻易就可以被人从微信号里窥探到一些个人信息个人隐私。相信很多人的微信号都是年少无知下,随意起下的。举传说中的古昆仑是月球吗?为什么?昆仑山脉是万山之祖龙脉之宗,但此昆仑非彼昆仑!奇书山海经中描述的古昆仑并非是现如今位于帕米尔高原的昆仑山脉,准确的说古昆仑是一座包含了山岭的大山,而昆仑山脉则是由山岭山谷山峰组成的