分享一个网站网站防火墙。功能说明:防护XSS,SQL,代码执行,文件包含等多种高危漏洞

本文涉及的产品
Web应用防火墙 3.0,每月20元额度 3个月
简介:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?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"]."/".date('Ymd',time())."-log.txt";
     //注意在/home/下建立 www用户组的文件夹 attacklog 用于记录攻击数据
     $logpath = "/home/attacklog/" . $_SERVER [ 'HTTP_HOST' ]. "-" . date ( 'Ymd' ,time()). "-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>host:" . $_SERVER [ 'HTTP_HOST' ]. "<br>页面:" . $_SERVER [ "PHP_SELF" ]. "<br>提交方式: " . $_SERVER [ "REQUEST_METHOD" ]. "<br>提交数据: " . $str );
             switch  ( $_SERVER [ 'HTTP_HOST' ]) {
                 case  'dangjian.citic.com' :
                     print  '{"code":"9999","msg":"数据包含非法参数,请重新操作"}' ;
                     break ;
                 case  'djfiles.citic.com' :
                     print  '{"code":"9999","msg":"数据包含非法参数,请重新操作"}' ;
                     break ;
                 case  'xfzx.citic.com' :
                     print  '{"code":"9999","msg":"数据包含非法参数,请重新操作"}' ;
                     break ;
                 default :
                     print  '{"code":"9999","msg":"数据包含非法参数,请重新操作"}' ;
                     break ;
             }
             exit ();
         }
     }
}
?>





在yii中加在的方法,

1
2
3
4
5
defined( 'YII_TRACE_LEVEL' or  define( 'YII_TRACE_LEVEL' ,3);
defined( 'G_APP_MODE_DEV' or  define( 'G_APP_MODE_DEV' ,false);
require_once ( 'waf.php' );
require_once ( $yii );
Yii::createWebApplication( $config )->run();






      本文转自ning1022 51CTO博客,原文链接:http://blog.51cto.com/ning1022/1889624,如需转载请自行联系原作者






相关文章
|
13天前
|
安全 网络安全 数据安全/隐私保护
XSS 漏洞可能会带来哪些危害?
【10月更文挑战第26天】XSS漏洞可能会给网站和用户带来诸多严重危害
|
13天前
|
存储 监控 安全
|
1月前
|
SQL 关系型数据库 MySQL
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
221 0
|
15天前
|
存储 JSON 安全
2024全网最全面及最新的网络安全技巧 二 之 CSRF+XSS漏洞的各类利用技巧
2024全网最全面及最新的网络安全技巧 二 之 CSRF+XSS漏洞的各类利用技巧
|
1月前
|
SQL 数据库
为什么 SQL 日志文件很大,我应该如何处理?
为什么 SQL 日志文件很大,我应该如何处理?
|
1月前
|
Web App开发 安全 关系型数据库
xss漏洞原理(五)BeEF
xss漏洞原理(五)BeEF
|
1月前
|
SQL 关系型数据库 MySQL
创建SQL数据库的基本步骤与代码指南
在信息时代,数据管理显得尤为重要,其中数据库系统已成为信息技术架构的关键部分。而当我们谈论数据库系统时,SQL(结构化查询语言)无疑是其中最核心的工具之一。本文将详细介绍如何使用SQL创建数据库,包括编写相应的代码和必要的步骤。由于篇幅限制,本文可能无法达到您要求的2000字长度,但会尽量涵盖创建数
41 3
|
1月前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
117 1
|
1月前
|
安全
xss漏洞原理(五)BeEF
xss漏洞原理(五)BeEF
|
1月前
|
开发框架 安全 JavaScript
xss漏洞原理(四)自动化XSS
xss漏洞原理(四)自动化XSS