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 相关文章推荐
生成缩略图
Oct 09 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
May 21 PHP
php 中奖概率算法实现代码
Jan 25 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 PHP
PHP如何使用JWT做Api接口身份认证的实现
Feb 03 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
第二节 对象模型 [2]
2006/10/09 PHP
php绘制一条直线的方法
2015/01/24 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
Python不规范的日期字符串处理类
2014/06/10 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
用生成器来改写直接返回列表的函数方法
2017/05/25 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
python路径的写法及目录的获取方式
2019/12/26 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
python调用百度API实现人脸识别
2020/11/17 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
Nike瑞士官网:Nike CH
2021/01/18 全球购物
最新奶茶店创业计划书
2014/01/25 职场文书
会计专业导师推荐信
2014/03/08 职场文书