目录
Medium:过滤的是 “&&” 和 “;” 也就是所我们一个“&” 仍然好用
1. stripslashes — 反引用一个引用字符串(返回一个去除转义反斜线后的字符串(\' 转换为 ' 等等)。双反斜线(\\)被转换为单个反斜线(\)。)
2. explode — 使用一个字符串分割另一个字符串()
什么是命令注入:
命令注入(Command Injection)是一种注入类型漏洞,是指用户输入的数据(命令)被程序拼接并传递给执行操作系统命令的函数执行。编程语言如C/C++,Java, PHP, Python, Go, Rust等,都支持执行系统命令,所以都有可能存在命令注入漏洞。
它通常是由于嵌入式应用程序或者web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。
四大难度
Low难度:没做任何限制
Medium:过滤的是 “&&” 和 “;” 也就是说我们一个“&” 仍然好用
High:是将红框里所有的字符都加进了黑名单
注意:“| ” 和 “|”有本质的区别
Impossible:不可能的难度
1. stripslashes — 反引用一个引用字符串(返回一个去除转义反斜线后的字符串(
\'
转换为'
等等)。双反斜线(\\
)被转换为单个反斜线(\
)。)
例:
输出:
说明:这段代码定义了一个名为
stripslashes_deep
的函数,它可以递归地对数组中的每个元素应用stripslashes
函数。stripslashes
函数可以删除由addslashes
函数添加的反斜杠。在这个例子中,
$array
是一个包含两个字符串和一个子数组的数组。子数组中也包含两个字符串。这些字符串中都包含由addslashes
函数添加的反斜杠。当我们调用
stripslashes_deep($array)
时,它会递归地对$array
中的每个元素应用stripslashes
函数,删除所有添加的反斜杠。
2. explode — 使用一个字符串分割另一个字符串()
例:
此函数返回由字符串组成的数组,每个元素都是
string
的一个子串,它们被字符串separator
作为边界点分割出来。
输出:
说明:
explode()
函数将字符串$pizza
按照空格分割成了一个数组$pieces
。然后,echo $pieces[0]
输出了数组中的第一个元素piece1
,echo $pieces[1]
输出了数组中的第二个元素piece2。
stristr — strstr() 函数的忽略大小写版本
返回
haystack
字符串从needle
第一次出现的位置开始到结尾的字符串。
3. 代码剖析
通过判断是否是全数字,拆散重新拼接起来的方法,达到限制输入命令的目的。
命令注入漏洞防范:
- 过滤用户输入:对用户提交的数据进行严格的过滤,以防止恶意命令被执行。可以使用白名单或正则表达式进行过滤。
- 限制使用危险函数:尽量避免使用 eval()、system、exec、shell_exec 等具有命令执行功能的函数。如果必须使用这些函数,应该对用户输入的参数进行严格的过滤和检查。
- 转义特殊字符:对传递给系统命令的参数进行转义,以防止特殊字符被误解释为命令。
- 降低应用程序权限:将应用程序的权限降到最低,以减少命令注入攻击造成的危害。
这些措施可以有效地防范命令注入漏洞,但并不能完全杜绝漏洞的产生。因此,在开发过程中应该时刻注意安全问题,遵循安全编码规范,定期对代码进行安全审计。