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中取得image按钮传递的name值
Oct 09 PHP
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
Dec 11 PHP
一篇有意思的技术文章php介绍篇
Oct 26 PHP
PHP通过API获取手机号码归属地
May 28 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
PHP实现的迷你漂流瓶
Jul 29 PHP
php简单防盗链实现方法
Jul 29 PHP
php session的锁和并发
Jan 22 PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 PHP
php实现的mongoDB单例模式操作类
Jan 20 PHP
php微信开发之谷歌测距
Jun 14 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 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安装攻略:常见问题解答(三)
2006/10/09 PHP
php 远程关机操作的代码
2008/12/05 PHP
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
PHP概率计算函数汇总
2015/09/13 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
从零学JS之你需要了解的几本书
2014/05/19 Javascript
javascript运动详解
2015/07/06 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
教你安装python Django(图文)
2013/11/04 Python
跟老齐学Python之关于类的初步认识
2014/10/11 Python
python修改注册表终止360进程实例
2014/10/13 Python
python简单判断序列是否为空的方法
2015/06/30 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
通过实例解析python and和or使用方法
2020/11/14 Python
本科毕业生的求职信范文
2013/11/20 职场文书
教育局长自荐信范文
2013/12/22 职场文书
网络程序员自荐信
2014/01/25 职场文书
趣味游戏活动方案
2014/02/07 职场文书
矿泉水广告词
2014/03/20 职场文书
免职证明样本
2014/10/23 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
创业计划书之家政服务
2019/09/18 职场文书
Python中如何处理常见报错
2022/01/18 Python