function waf($str){ return preg_match('/ |\*|\x09|\x0a|\x0b|\x0c|\x00|\x0d|\xa0|\x23|\#|file|into|select/i', $str); }
时间: 2023-09-22 13:05:26 浏览: 105
这是一个简单的 PHP 函数,用于实现 Web 应用程序防火墙 (WAF) 功能,用来检查输入的字符串是否包含一些特殊字符或关键字,以防止 SQL 注入、代码注入等攻击。
具体来说,这个函数使用了 PHP 的 preg_match 函数来匹配输入字符串中是否包含以下字符和关键字:
- 空格:' '
- 星号:'*'
- 水平制表符:'\x09'
- 换行符:'\x0a'
- 垂直制表符:'\x0b'
- 换页符:'\x0c'
- 空字符:'\x00'
- 回车符:'\x0d'
- 不间断空格:'\xa0'
- 井号:'\x23'
- SQL 关键字:'file', 'into', 'select'
如果匹配成功,则返回 1,表示输入字符串中包含上述字符和关键字,否则返回 0,表示输入字符串是安全的。
需要注意的是,这个函数只是一个简单的防火墙功能,不能保证完全防止所有的攻击,因此在实际应用中还需要采取更多的安全措施。
相关问题
<?php highlight_file(__FILE__); class ease{ private $method; private $args; function __construct($method, $args) { $this->method = $method; $this->args = $args; } function __destruct(){ if (in_array($this->method, array("ping"))) { call_user_func_array(array($this, $this->method), $this->args); } } function ping($ip){ exec($ip, $result); var_dump($result); } function waf($str){ if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) { return $str; } else { echo "don't hack"; } } function __wakeup(){ foreach($this->args as $k => $v) { $this->args[$k] = $this->waf($v); } } } $ctf=@$_POST['ctf']; @unserialize(base64_decode($ctf)); ?>
这是一段 PHP 代码。这段代码定义了一个名为 "ease" 的类,该类具有两个私有变量:$method 和 $args。在类的构造函数中,这两个变量会被初始化为传入的参数。类还有两个函数:ping() 和 waf()。在类的析构函数中,如果 $method 的值为 "ping",则会调用 ping() 函数,并将 $args 传递给它作为参数。ping() 函数使用 exec() 函数执行传入的参数 $ip,并使用 var_dump() 函数输出结果。waf() 函数使用 preg_match_all() 函数来匹配传入的字符串 $str 中的字符串 "or",如果匹配成功则返回 true,否则返回 false。
<?php highlight_file(__FILE__); class ease{ private $method; private $args; function __construct($method, $args) { $this->method = $method; $this->args = $args; } function __destruct(){ if (in_array($this->method, array("ping"))) { call_user_func_array(array($this, $this->method), $this->args); } } function ping($ip){ exec($ip, $result); var_dump($result); } function waf($str){ if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) { return $str; } else { echo "don't hack"; } } function __wakeup(){ foreach($this->args as $k => $v) { $this->args[$k] = $this->waf($v); } } } $ctf=@$_POST['ctf']; @unserialize(base64_decode($ctf)); ?>
这段代码是一个简单的 PHP 类,名为 "ease"。它接受一个方法和参数作为构造函数的参数。在析构函数中,如果方法是 "ping",则调用 call_user_func_array 函数来执行该方法,并将参数传递给它。在这个类中,有一个 ping 方法,它通过执行给定的命令(在这里是 $ip)来执行系统命令,并将结果打印出来。
类中还有一个名为 "waf" 的方法,它用于实现一个简单的 Web 应用防火墙功能。它使用正则表达式来检查输入字符串中是否包含一些特定的关键词,如 "|", "&", ";", "/", "cat", "flag", "tac", "php", "ls"。如果匹配到了这些关键词,则输出 "don't hack"。
在类的 __wakeup 方法中,对传入的参数进行过滤,使用 waf 方法来检查和过滤参数中的关键词。
最后,代码通过接收一个名为 "ctf" 的 POST 参数,并对其进行反序列化和解码操作。但是由于代码中没有对 $ctf 进行赋值操作,因此这段代码没有实际工作。
阅读全文