PHP实现的防止跨站和xss攻击代码【来自阿里云】


Posted in PHP onJanuary 29, 2018

本文实例讲述了PHP实现的防止跨站和xss攻击代码。分享给大家供大家参考,具体如下:

文档说明:

1.将waf.php传到要包含的文件的目录

2.在页面中加入防护,有两种做法,根据情况二选一即可:

a).在所需要防护的页面加入代码

require_once('waf.php');

就可以做到页面防注入、跨站

如果想整站防注,就在网站的一个公用文件中,如数据库链接文件config.inc.php中!

添加require_once('waf.php');来调用本代码

常用php系统添加文件

PHPCMS V9 \phpcms\base.php
PHPWIND8.7 \data\sql_config.php
DEDECMS5.7 \data\common.inc.php
DiscuzX2   \config\config_global.php
Wordpress   \wp-config.php
Metinfo   \include\head.php

b).在每个文件最前加上代码

在php.ini中找到:

Automatically add files before or after any PHP document.

auto_prepend_file = waf.php路径;

PHP文件 waf.php

<?php
/*云体检通用漏洞防护补丁v1.1
更新时间:2013-05-25
功能说明:防护XSS,SQL,代码执行,文件包含等多种高危漏洞
*/
$url_arr=array(
'xss'=>"\\=\\+\\/v(?:8|9|\\+|\\/)|\\%0acontent\\-(?:id|location|type|transfer\\-encoding)",
);
$args_arr=array(
'xss'=>"[\\'\\\"\\;\\*\\<\\>].*\\bon[a-zA-Z]{3,15}[\\s\\r\\n\\v\\f]*\\=|\\b(?:expression)\\(|\\<script[\\s\\\\\\/]|\\<\\!\\[cdata\\[|\\b(?:eval|alert|prompt|msgbox)\\s*\\(|url\\((?:\\#|data|javascript)",
'sql'=>"[^\\{\\s]{1}(\\s|\\b)+(?:select\\b|update\\b|insert(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+into\\b).+?(?:from\\b|set\\b)|[^\\{\\s]{1}(\\s|\\b)+(?:create|delete|drop|truncate|rename|desc)(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+(?:table\\b|from\\b|database\\b)|into(?:(\\/\\*.*?\\*\\/)|\\s|\\+)+(?:dump|out)file\\b|\\bsleep\\([\\s]*[\\d]+[\\s]*\\)|benchmark\\(([^\\,]*)\\,([^\\,]*)\\)|(?:declare|set|select)\\b.*@|union\\b.*(?:select|all)\\b|(?:select|update|insert|create|delete|drop|grant|truncate|rename|exec|desc|from|table|database|set|where)\\b.*(charset|ascii|bin|char|uncompress|concat|concat_ws|conv|export_set|hex|instr|left|load_file|locate|mid|sub|substring|oct|reverse|right|unhex)\\(|(?:master\\.\\.sysdatabases|msysaccessobjects|msysqueries|sysmodules|mysql\\.db|sys\\.database_name|information_schema\\.|sysobjects|sp_makewebtask|xp_cmdshell|sp_oamethod|sp_addextendedproc|sp_oacreate|xp_regread|sys\\.dbms_export_extension)",
'other'=>"\\.\\.[\\\\\\/].*\\%00([^0-9a-fA-F]|$)|%00[\\'\\\"\\.]");
$referer=empty($_SERVER['HTTP_REFERER']) ? array() : array($_SERVER['HTTP_REFERER']);
$query_string=empty($_SERVER["QUERY_STRING"]) ? array() : array($_SERVER["QUERY_STRING"]);
check_data($query_string,$url_arr);
check_data($_GET,$args_arr);
check_data($_POST,$args_arr);
check_data($_COOKIE,$args_arr);
check_data($referer,$args_arr);
function W_log($log)
{
  $logpath=$_SERVER["DOCUMENT_ROOT"]."/log.txt";
  $log_f=fopen($logpath,"a+");
  fputs($log_f,$log."\r\n");
  fclose($log_f);
}
function check_data($arr,$v) {
 foreach($arr as $key=>$value)
 {
  if(!is_array($key))
  { check($key,$v);}
  else
  { check_data($key,$v);}
  if(!is_array($value))
  { check($value,$v);}
  else
  { check_data($value,$v);}
 }
}
function check($str,$v)
{
  foreach($v as $key=>$value)
  {
  if (preg_match("/".$value."/is",$str)==1||preg_match("/".$value."/is",urlencode($str))==1)
    {
      //W_log("<br>IP: ".$_SERVER["REMOTE_ADDR"]."<br>时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>页面:".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交数据: ".$str);
      print "您的提交带有不合法参数,谢谢合作";
      exit();
    }
  }
}
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
dedecms模板标签代码官方参考
Mar 17 PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
php通过数组实现多条件查询实现方法(字符串分割)
May 06 PHP
php实现阳历阴历互转的方法
Oct 28 PHP
php常用图片处理类
Mar 16 PHP
php制作基于xml的RSS订阅源功能示例
Feb 08 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
Aug 10 PHP
Laravel 模型关联基础教程详解
Sep 17 PHP
PHP使用观察者模式处理异常信息的方法详解
Sep 24 PHP
PHP获取类私有属性的3种方法
Sep 10 PHP
php实现的AES加密类定义与用法示例
Jan 29 #PHP
php 判断IP为有效IP地址的方法
Jan 28 #PHP
Laravel中unique和exists验证规则的优化详解
Jan 28 #PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
Jan 27 #PHP
PHP设计模式之注册树模式分析
Jan 26 #PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 #PHP
PHP CURL与java http使用方法详解
Jan 26 #PHP
You might like
PHP 模拟登陆MSN并获得用户信息
2009/05/16 PHP
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
2012/06/07 PHP
PHP小教程之实现双向链表
2014/06/12 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
Javascript 圆角div的实现代码
2009/10/15 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
Python用threading实现多线程详解
2017/02/03 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
在Python中COM口的调用方法
2019/07/03 Python
Django后端接收嵌套Json数据及解析详解
2019/07/17 Python
python匿名函数的使用方法解析
2019/10/10 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
毕业设计计划书
2014/01/09 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
Oracle 区块链表创建过程详解
2021/05/15 Oracle
redis实现的四种常见限流策略
2021/06/18 Redis
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技