在php语言中,单引号和双引号都可以表示一个字符串,但是对于双引号来说,可能会对引号内的内容进行二次解释,这就可能会出现安全问题。
举个简单例子
<?php
$a = 1;
$b = 2;
echo '$a$b';//输出结果为$a$b
echo "$a$b";//输出结果为12
?>
可以看到这两个输出的结果并不相同。在双引号中倘若有${}出现,那么{}内的内容将被当做代码块来执行。可以看到成功执行了phpinfo()
试想一下,倘若在一个cms的后台,可以修改数据库的配置文件,且配置文件中的值用双引号包括,我们虽然也可以直接闭合代码达到getshell的后果,但是如果cms对传递的参数进行了addlashes()处理的话,我们就无法去闭合代码了,但这时我们可以传入${命令}就可以达到getshell的目的。
现在,让我们来修改一下代码,让我们不只能输出phpinfo
<?php echo "${@assert($_POST[a])}";?> //@是用来防止输出错误信息的
成功连接
本文简单记录了双引号可能会引发的代码执行的情况
对于这种漏洞的防御,一定要明确单引号与双引号的区别所在,不要简单认为两者是互相可以替代的,在平时的代码书写中能只用单引号一定不要用双引号,毕竟单引号的解释时间也比双引号少得多,代码运行相对更快。
最近项目部署的时候客户使用的绿盟扫描出一些漏洞,老大让我处理,经过看大神的博客等方式,分享一些简单的解决方法。跨网站脚本是一种网站应用程序的安全漏洞攻击
一位西门子公司的合同工十年前在给西门子写的电子表格中植入了逻辑炸弹,它会在特定日期之后导致电子表格崩溃,于是西门子就必须再次雇佣该名合同工进行修复,每次都需要重新支付修复费用,持续时间近 3 年。最近他被抓包了
第一次接触到目录遍历漏洞还是在 ThinkJS 2 的时候。代码如下图,目的是当用户访问的 URL 是静态资源的时候返回静态资源的地址。其中 pathname 就是用户访问的 URL 中的路径,我们发现代码中只是简单的解码之后
随着数据泄露事件的频繁发生,创建和维护安全的软件产品对于每一个组织来说,都变得越来越重要了。尽管并非所有的攻击都可以被预期或防范,但是我们至少可以通过消减软件的漏洞,来避免攻击的暴露面。
SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。在设计程序,忽略了对输入字符串中夹带的SQL指令的检查
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!