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 相关文章推荐
PHP的FTP学习(三)
Oct 09 PHP
php目录管理函数小结
Sep 10 PHP
php 获取本机外网/公网IP的代码
May 09 PHP
PHP程序员最常犯的11个MySQL错误小结
Nov 20 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
Jun 03 PHP
php上传图片到指定位置路径保存到数据库的具体实现
Dec 30 PHP
ThinkPHP实现ajax仿官网搜索功能实例
Dec 02 PHP
php中使用gd库实现远程图片下载实例
May 12 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
Laravel中为什么不使用blpop取队列详析
Aug 01 PHP
PHP一个简单的无需刷新爬虫
Jan 05 PHP
PHP反射实际应用示例
Apr 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
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
Easy UI动态树点击文字实现展开关闭功能
2017/09/30 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
tensorflow获取变量维度信息
2018/03/10 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
python贪吃蛇游戏代码
2020/04/18 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
python实现数字炸弹游戏程序
2020/07/17 Python
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
西班牙高科技产品购物网站:MejorDeseo
2019/09/08 全球购物
2014国培学习感言
2014/03/05 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
重阳节慰问信
2015/02/15 职场文书
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js