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 相关文章推荐
新安装的MySQL数据库需要注意的安全知识
Jul 30 PHP
PHP 全角转半角实现代码
May 16 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
May 18 PHP
php制作中间带自己定义图片二维码的方法
Jan 27 PHP
php全角字符转换为半角函数
Feb 07 PHP
php获取文章上一页与下一页的方法
Dec 01 PHP
php使用正则验证中文
Apr 06 PHP
Smarty3配置及入门语法
Feb 22 PHP
thinkPHP5.0框架命名空间详解
Mar 18 PHP
CakePHP框架Model函数定义方法示例
Aug 04 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
Laravel自动生成UUID,从建表到使用详解
Oct 24 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
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
WampServer搭建php环境时遇到的问题汇总
2015/07/23 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
文本链接逐个出现的js脚本
2007/12/12 Javascript
JS启动应用程序的一个简单例子
2008/05/11 Javascript
JavaScript 仿关机效果的图片层
2008/12/26 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
2020/04/14 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
django 创建过滤器的实例详解
2017/08/14 Python
python如何实现反向迭代
2018/03/20 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
浅谈python3中input输入的使用
2019/08/02 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
群众路线批评与自我批评
2014/02/06 职场文书
银行求职信
2014/05/31 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
推销搭讪开场白
2015/05/28 职场文书
如何用python插入独创性声明
2021/03/31 Python
如何使用CocosCreator对象池
2021/04/14 Javascript
Redis 哨兵机制及配置实现
2022/03/25 Redis
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android