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 相关文章推荐
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
一篇入门的php Class 文章
Apr 04 PHP
php面向对象全攻略 (十五) 多态的应用
Sep 30 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
Sep 28 PHP
php GUID生成函数和类
Mar 10 PHP
php设置静态内容缓存时间的方法
Dec 01 PHP
10个超级有用值得收藏的PHP代码片段
Jan 22 PHP
64位windows系统下安装Memcache缓存
Dec 06 PHP
制作个性化的WordPress登陆界面的实例教程
May 21 PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 PHP
PHP-FPM和Nginx的通信机制详解
Feb 01 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下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
php xml文件操作实现代码(二)
2009/03/20 PHP
PHP5中虚函数的实现方法分享
2011/04/20 PHP
PHP排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
php中的登陆login实例代码
2016/06/20 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
javascript判断数组内是否重复的方法
2015/04/21 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
2015/11/30 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
vue.js学习笔记之绑定style样式和class列表
2016/10/31 Javascript
Bootstrap 填充Json数据的实例代码
2017/01/11 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
基于react后端渲染模板引擎noox发布使用
2018/01/11 Javascript
浅谈Vue.use的使用
2018/08/29 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
简单谈谈Python中的闭包
2016/11/30 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2018/01/16 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
Django模板语言 Tags使用详解
2019/09/09 Python
Python绘制热力图示例
2019/09/27 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
广州一家公司的.NET面试题
2016/06/11 面试题
英语演讲稿范文
2014/01/03 职场文书
我未来的职业规划范文
2014/01/11 职场文书
安全教育月活动总结
2014/05/05 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
化验员岗位职责
2015/02/14 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript