这篇文章主要介绍了PHP实现的防止跨站和XSS攻击代码,是一款来自阿里云的防注入脚本,可实现针对注入,XSS攻击等的过滤功能,需要的朋友可以参考下
本文实例讲述了PHP实现的防止跨站和XSS攻击代码分享给大家供大家参考,具体如下:
文档说明:
1.将waf.php传到要包含的文件的目录
2.在页面中加入防护,有两种做法,根据情况二选一即可:
一)在所需要防护的页面加入代码
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文件中找到:
在任何PHP文档之前或之后自动添加文件。
auto_prepend_file = waf.php路径;
PHP文件waf.php
<?PHP/ *云体检通用漏洞防护补丁V1.1更新时间:2013年5月25日功能说明:防护XSS,SQL,代码执行,文件包含等多种高危漏洞* /$ url_arr =阵列('XSS'=>“\\ = \\ + \\ / V(?:8 | 9 | \\ + | \\ /)| \\%0acontent \\ - (?: ID |位置|类型|转印\ \ -encoding)”,);$ args_arr =阵列('XSS'=> “[\\'\\\” \\; \\ * \\ <\\>]。* \\盂兰盆[A-ZA-Z] {3,15} [\\小号\\ ř\\ñ\\ v \\ F] * \\ = | \\ b(?:表达式)\\(| \\ <脚本[\\小号\\\\\\ /] | \\ <\\ !\\ [CDATA \\ | \\ b(:EVAL |警报|提示| MSGBOX?)\\ S * \\(|网址\\((?:\\#|数据| JavaScript的)”,'SQL'=>“[^ \\ {\\ s]的{1}(\\ S | \\ B)+(?:选择\\ C |更新\\ C |插入件(?:(\\ / \ \ *。* \\ * \\ /)|。?(\\为s)|(\\ +))+成\\ b)+(?:从\\ C |。?设置\\ b)| [^ \\ {\\ s]的{1}(\\ S | \\ b)+(?:创建|删除|降|截断|重命名| DESC)(?:?(\\ / \\ * * \\ * \\ /)|(\\县)|(\\ +))+(?:\\表C |从\\ C |数据库\\ b)|成(:(\\ / \\ *?。 * \\ * \\ /)| \\?S | \\ +)+(?:转储|出)文件\\ C | \\ bsleep \\([\\秒] * [\\ d] + [ \\ S] * \\)|基准\\(([^ \\,] *)\\,([^ \\,] *)\\)|(?:声明|设为|选择)\\ b * @ |工会\\ b *(?:选择|全部)\\ C |(:?选择|从| |表更新|插入|创建|删除|下降|授予|截断|重命名|高管|倒序|数据库|设置|哪里)\\ b *(字符集|。ASCII |斌|焦炭|解压缩| CONCAT | CONCAT_WS | CONV | EXPORT_SET |六角| INSTR |左| LOAD_FILE |定位|中期|分|子|十月|扭转|右| UNHEX)\\(|(?:。主\\ SYSDATABASES | msysaccessobjects | msysqueries | sysmodules | MySQL的\\分贝| SYS \\数据库名称| INFORMATION_SCHEMA \\。|系统对象| sp_makewebtask | xp_cmdshell的| sp_OAMethod将向| sp_addextendedproc |由sp_OACreate | xp_regread |。SYS \\ DBMS_EXPORT_EXTENSION)”,'其他'=>“\\ [\\\\\\ /] * \\%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($引用者,$ args_arr);函数W_log($ log){
$日志路径= $ _ SERVER [ “DOCUMENT_ROOT”] “/ log.txt的”。
$ log_f =的fopen($日志路径, “A +”);
的fputs($ log_f,$日志 “\ r \ n”);
FCLOSE($ log_f);}函数check_data($ arr,$ v){
foreach($ arr as $ key => $ value)
{
如果(!is_array($键))
{check($ key,$ v);}
其他
{check_data($ key,$ v);}
如果(!is_array($值))
{check($ value,$ v);}
其他
{check_data($ value,$ v);}
}}函数检查($ 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);
打印“您的提交带有不合法参数,谢谢合作”;
出口();
}
}}?>
更多关于PHP相关内容感兴趣的读者可查看本专题:“ PHP程序设计安全教程 ”,“ PHP安全过滤技巧总结 ”,“ PHP运算与运算符用法总结 ”,“ PHP基本语法入门教程 ”, “ php面向对象程序设计入门教程”,“ php字符串(字符串)用法总结 ”,“ php + mysql数据库操作入门教程 ”及“ php常见数据库操作技巧汇总 ”
最后于 2018-3-11
被admin编辑
,原因: