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数组中删除元素之重新索引的方法
Sep 16 PHP
ucenter通信原理分析
Jan 09 PHP
php使用Cookie控制访问授权的方法
Jan 21 PHP
Windows7下的php环境配置教程
Feb 28 PHP
如何利用http协议发布博客园博文评论
Aug 03 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
Apr 15 PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 PHP
php检测mysql表是否存在的方法小结
Jul 20 PHP
redis+php实现微博(二)发布与关注功能详解
Sep 23 PHP
aec加密 php_php aes加密解密类(兼容php5、php7)
Mar 14 PHP
phpquery中文手册
Mar 18 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
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
德生1994机评
2021/03/02 无线电
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
Python实现获取操作系统版本信息方法
2015/04/08 Python
python设置值及NaN值处理方法
2018/07/03 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
会计学专业学生的求职信范文
2014/01/27 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
党员承诺书内容
2014/03/26 职场文书
医师定期考核实施方案
2014/05/07 职场文书
百日安全生产活动总结
2014/07/05 职场文书
公司董事长助理工作职责
2014/07/12 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
2014年团委工作总结
2014/11/13 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
早会开场白台词大全
2015/06/01 职场文书
升学宴家长答谢词
2015/09/29 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python