PHP防止跨站攻击的脚本
直接把该文件放置到入口文件中即可防止对应的跨站攻击
1 <?php 2 //防止跨站攻击脚本 3 $referer=empty($_SERVER['HTTP_REFERER']) ? array() : array($_SERVER['HTTP_REFERER']); 4 function customError($errno, $errstr, $errfile, $errline) 5 { 6 echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />"; 7 die(); 8 } 9 set_error_handler("customError",E_ERROR); 10 11 $getfilter="'|<[^>]*?>|^\\+\/v(8|9)|\\b(and|or)\\b.+?(>|<|=|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; 12 $postfilter="^\\+\/v(8|9)|\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|<\\s*img\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; 13 $cookiefilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; 14 function StopAttack($StrFiltKey,$StrFiltValue,$ArrFiltReq){ 15 16 $StrFiltValue=arr_foreach($StrFiltValue); 17 if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1){ 18 refreshto("http://www.qp1001.com","您的提交带有不合法参数,谢谢合作!"); 19 exit(); 20 } 21 if (preg_match("/".$ArrFiltReq."/is",$StrFiltKey)==1){ 22 refreshto("http://www.qp1001.com","您的提交带有不合法参数,谢谢合作!"); 23 exit(); 24 } 25 } 26 27 foreach($_GET as $key=>$value){ 28 StopAttack($key,$value,$getfilter); 29 } 30 foreach($_POST as $key=>$value){ 31 StopAttack($key,$value,$postfilter); 32 } 33 foreach($_COOKIE as $key=>$value){ 34 StopAttack($key,$value,$cookiefilter); 35 } 36 foreach($referer as $key=>$value){ 37 StopAttack($key,$value,$getfilter); 38 } 39 40 function arr_foreach($arr) { 41 static $str; 42 if (!is_array($arr)) { 43 return $arr; 44 } 45 foreach ($arr as $key => $val ) { 46 47 if (is_array($val)) { 48 arr_foreach($val); 49 } else { 50 51 $str[] = $val; 52 } 53 } 54 return implode($str); 55 } 56 ?>
但行好事,莫问前程!
本文来自博客园,作者:yangphp,转载请注明原文链接:https://www.cnblogs.com/ypeih/p/3173172.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?