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
php 无限分类的树类代码
Dec 03 PHP
PHP 文件上传全攻略
Apr 28 PHP
php学习笔记(三)操作符与控制结构
Aug 06 PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 PHP
解析在zend Farmework下如何创立一个FORM表单
Jun 28 PHP
PHP与Java对比学习日期时间函数
Jul 03 PHP
php mongodb操作类 带几个简单的例子
Aug 25 PHP
php微信开发之音乐回复功能
Jun 14 PHP
php命令行写shell实例详解
Jul 19 PHP
laravel框架语言包拓展实现方法分析
Nov 22 PHP
thinkphp5实现微信扫码支付
Dec 23 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
我常用的几个类
2006/10/09 PHP
php debug 安装技巧
2011/04/30 PHP
浅析php创建者模式
2014/11/25 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
DIV+CSS+jQ实现省市联动可扩展
2016/06/22 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
2017/07/27 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
python实现的简单RPG游戏流程实例
2015/06/28 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
Python单体模式的几种常见实现方法详解
2017/07/28 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
python 日志 logging模块详细解析
2020/03/31 Python
抽奖活动主持词
2014/03/31 职场文书
学习“七一”讲话精神体会
2014/07/08 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
依法行政工作汇报
2014/10/28 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis