开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7503|回复: 3
收起左侧

[技术专题] PHP waf加固sql注入和xss注入

[复制链接]
发表于 2020-3-26 14:14:18 | 显示全部楼层 |阅读模式   江苏省苏州市
PHP WAF加固sql注入和xss注入代码如下:
  1. <div><?php </div><div>#this php page is provide the safe value.</div><div>class waf</div><div>{</div><div>    private $input;</div><div>    private $pattern;</div><div>    private $log_path;</div><div>
  2. </div><div>    function __construct()</div><div>    {</div><div>        session_start();</div><div>        date_default_timezone_set('PRC');<span style="white-space:pre">                                        </span>//设置PRC时区</div><div>        $this->log_path = "./waf.log";<span style="white-space:pre">                                                                </span>//设置日志文件路径</div><div>        $this->input = array();</div><div>        $this->input["GET"] = $_GET;</div><div>        $this->input["POST"] = $_POST;</div><div>        $this->input["SERVER"] = $_SERVER;</div><div>        $this->input["COOKIE"] = $_COOKIE;</div><div>        $this->input["SESSION"] = $_SESSION;</div><div>        $this->input["FILES"] = $_FILES;</div><div>        $this->input["ENV"] = $_ENV;</div><div>    }</div><div>
  3. </div><div>    private function filter_0x25($str)<span style="white-space:pre">                                                                                </span>//过滤百分号</div><div>    {</div><div>        if (strpos($str, "%25") !== false) {</div><div>            $str = str_replace("%25", "%", $str);</div><div>            return filter_0x25($str);</div><div>        } else {</div><div>            return $str;</div><div>        }</div><div>    }</div><div>
  4. </div><div>    private function get_visitor($word,$method=1)</div><div>    {</div><div>        $ip = $this->input["SERVER"]["REMOTE_ADDR"];</div><div>        $visitor_path = $this->input["SERVER"]["REQUEST_URI"];</div><div>        $date_time = $this->input["SERVER"]["REQUEST_TIME"];</div><div>        $date_time = date("Y-m-d H:i", $date_time);</div><div>        if($method == 1){</div><div>            @$questesion = "$ip 使用危险字符 $word 在 $date_time 访问网站 $visitor_path\r\n\r\n";</div><div>        }else if($method == 2){</div><div>            @$questesion = "$ip 使用危险方法/协议 $word 在 $date_time 访问网站 $visitor_path\r\n\r\n";</div><div>        }</div><div>        if (!file_exists($this->log_path)) {</div><div>            $fp = fopen($this->log_path, "w+");</div><div>            fclose($fp);</div><div>        }</div><div>        file_put_contents($this->log_path, $questesion, FILE_APPEND | LOCK_EX);<span style="white-space:pre">                        </span>//使用追加方式写入文件</div><div>        die("the website has been attack!");</div><div>    }</div><div>
  5. </div><div>    function parse_url(){</div><div>        $url = $this->input["SERVER"]["REQUEST_URI"];</div><div>        $this->input["SERVER"]["REQUEST_URI"] =addslashes(htmlspecialchars($this->filter_0x25($url)));<span style="white-space:pre">                                                                                        </span>//实体化值,并对特殊字符进行转义</div><div>        foreach($this->input["POST"] as $key => $value){</div><div>            $this->input["POST"][$key] = addslashes(htmlspecialchars($this->filter_0x25($value)));</div><div>        }</div><div>        foreach($this->input["GET"] as $key => $value){</div><div>            $this->input["GET"][$key] =addslashes(htmlspecialchars($this->filter_0x25($value)));</div><div>        }</div><div>    }</div><div>
  6. </div><div>    function limit_method(){</div><div>        $method = $this->input["SERVER"]["REQUEST_METHOD"];</div><div>        $protocol = $this->input["SERVER"]["SERVER_PROTOCOL"];</div><div>        $boolen = true;</div><div>        if($method === "GET" || $method === "POST"){<span style="white-space:pre">                                                </span>//判断用户请求方式</div><div>            $boolen = true;</div><div>        }else{</div><div>            $boolen = false;</div><div>        }</div><div>        if($protocol === "HTTP/1.1" || $protocol === "HTTP/1.0"){<span style="white-space:pre">                        </span>//判断当前所用协议是否规范</div><div>            $boolen = true;</div><div>        }else{</div><div>            $boolen = false;</div><div>        }</div><div>        if($boolen === false){</div><div>            $this->get_visitor($method."/".$protocol,2);</div><div>        }</div><div>    }</div><div>
  7. </div><div>    function replace_waf()</div><div>    {</div><div>        foreach ($this->input as $key => $value) {</div><div>            foreach ($value as $k => $v) {</div><div>                if(is_array($v)){</div><div>                    $this->get_visitor($v);</div><div>                }</div><div>                $this->input[$key][$k] = urldecode($v);</div><div>            }</div><div>        }</div><div>    }</div><div>
  8. </div><div>    function import_waf()<span style="white-space:pre">                                                        </span>//对用户传入内容进行过滤</div><div>    {</div><div>        $this->pattern = "select|insert|update|delete|union|load_file|outfile|dumpfile|sub|hex|drop|";</div><div>        $this->pattern .= "file_put_contents|fwrite|curl|system|eval|assert|flag|system|into|wget";</div><div>        $this->pattern .= "|`|openlog|syslog|readlink|symlink|popepassthru|stream_socket_server|assert|pcntl_exec|or";</div><div>        $this->pattern .= "|passthru|exec|system|chroot|scandir|chgrp|chown|shell_exec|proc_open|proc_get_status|popen|ini_alter|ini_restore|if|then|and";</div><div>        $array_pattern = explode("|", $this->pattern);</div><div>        foreach ($this->input as $key => $value) {</div><div>            if ($key != "SERVER") {</div><div>                foreach ($value as $k => $v) {</div><div>                    foreach ($array_pattern as $key => $pattern) {</div><div>                        if(is_array($v)){</div><div>                            $this->get_visitor($v);</div><div>                        }</div><div>                        if (preg_match("/$pattern/i", $v)) {</div><div>                            $this->get_visitor($v);</div><div>                        }</div><div>                    }</div><div>                }</div><div>            }</div><div>        }</div><div>    }</div><div>}</div><div>
  9. </div><div>
  10. </div><div>//实例化对象并调用方法。</div><div>$a = new waf();</div><div>$a->replace_waf();</div><div>$a->import_waf();</div><div>$a->limit_method();</div><div>$a->parse_url();</div><div>?></div><div></div>
复制代码





发表于 2021-3-5 10:27:03 | 显示全部楼层   北京市北京市
感谢分享
回复 支持 反对

使用道具 举报

发表于 2020-4-9 23:29:19 | 显示全部楼层   湖北省黄冈市
感谢大佬分享 很实用
回复 支持 反对

使用道具 举报

结帖率:100% (64/64)
发表于 2020-3-26 19:18:47 | 显示全部楼层   河南省濮阳市
感谢分享哇
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表