php过滤特殊危险字符的总结
作者:手机用户2602914917 | 来源:互联网 | 2014-08-24 13:57
在网站中表单提交或url获取值我们都可能碰到一些安全问题,下面我总结了一些常用的过滤一些危险特殊字符的解决方法,一般,对于传进来的字符,php可以用addslashes函数处理一遍(要get_magic_quotes_g...
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
php过滤特殊危险字符的总结
发布: 来源: 添加日期:2014-08-21 15:39:32 浏览: 评论:0
在网站中表单提交或url获取值我们都可能碰到一些安全问题,下面我总结了一些常用的过滤一些危险特殊字符的解决方法,一般,对于传进来的字符,php可以用addslashes函数处理一遍(要get_magic_quotes_gpc()为假才处理,不然就重复转义了!),这样就能达到一定程度的安全要求,比如这样,代码如下:
- if (!get_magic_quotes_gpc()) {
- add_slashes($_GET);
- add_slashes($_POST);
- add_slashes($_COOKIE);
- }
-
- function add_slashes($string) {
- if (is_array($string)) {
- foreach ($string as $key => $value) {
- $string[$key] = add_slashes($value);
- }
- } else {
- $string = addslashes($string);
- }
- return $string;
- }
但是还可以更进一步进行重新编码,解码,代码如下:
- function htmlencode($str) {
- if(emptyempty($str)) return;
- if($str=="") return $str;
- $str=trim($str);
- $str=str_replace("&","&",$str);
- $str=str_replace(">",">",$str);
- $str=str_replace("<","<",$str);
- $str=str_replace(chr(32)," ",$str);
- $str=str_replace(chr(9)," ",$str);
- $str=str_replace(chr(34),"&",$str);
- $str=str_replace(chr(39),"&#39;",$str);
- $str=str_replace(chr(13),"
",$str);
- $str=str_replace("&#39;","&#39;&#39;",$str);
- $str=str_replace("select","sel&#101;ct",$str);
- $str=str_replace("join","jo&#105;n",$str);
- $str=str_replace("union","un&#105;on",$str);
- $str=str_replace("where","wh&#101;re",$str);
- $str=str_replace("insert","ins&#101;rt",$str);
- $str=str_replace("delete","del&#101;te",$str);
- $str=str_replace("update","up&#100;ate",$str);
- $str=str_replace("like","lik&#101;",$str);
- $str=str_replace("drop","dro&#112;",$str);
- $str=str_replace("create","cr&#101;ate",$str);
- $str=str_replace("modify","mod&#105;fy",$str);
- $str=str_replace("rename","ren&#097;me",$str);
- $str=str_replace("alter","alt&#101;r",$str);
- $str=str_replace("cast","ca&#115;",$str);
- return $str;
- }
这样就能更放心的对外来数据进行入库处理了,但是从数据库取出来,在前台显示的时候,必须重新解码一下,代码如下:
-
-
- function htmldecode($str) {
- if(emptyempty($str)) return;
- if($str=="") return $str;
- $str=str_replace("sel&#101;ct","select",$str);
- $str=str_replace("jo&#105;n","join",$str);
- $str=str_replace("un&#105;on","union",$str);
- $str=str_replace("wh&#101;re","where",$str);
- $str=str_replace("ins&#101;rt","insert",$str);
- $str=str_replace("del&#101;te","delete",$str);
- $str=str_replace("up&#100;ate","update",$str);
- $str=str_replace("lik&#101;","like",$str);
- $str=str_replace("dro&#112;","drop",$str);
- $str=str_replace("cr&#101;ate","create",$str);
- $str=str_replace("mod&#105;fy","modify",$str);
- $str=str_replace("ren&#097;me","rename",$str);
- $str=str_replace("alt&#101;r","alter",$str);
- $str=str_replace("ca&#115;","cast",$str);
- $str=str_replace("&","&",$str);
- $str=str_replace(">",">",$str);
- $str=str_replace("<","<",$str);
- $str=str_replace(" ",chr(32),$str);
- $str=str_replace(" ",chr(9),$str);
- $str=str_replace("&",chr(34),$str);
- $str=str_replace("&#39;",chr(39),$str);
- $str=str_replace("
",chr(13),$str);
- $str=str_replace("&#39;&#39;","&#39;",$str);
- return $str;
- }
虽然多了一步编码,解码的过程,但是安全方面,会更进一步,要如何做,自己取舍吧.
再附一些代码如下:
- function safe_replace($string) {
- $string = str_replace(&#39; &#39;,&#39;&#39;,$string);
- $string = str_replace(&#39;&#39;&#39;,&#39;&#39;,$string);
- $string = str_replace(&#39;&#39;&#39;,&#39;&#39;,$string);
- $string = str_replace(&#39;*&#39;,&#39;&#39;,$string);
- $string = str_replace(&#39;"&#39;,&#39;"&#39;,$string);
- $string = str_replace("&#39;",&#39;&#39;,$string);
- $string = str_replace(&#39;"&#39;,&#39;&#39;,$string);
- $string = str_replace(&#39;;&#39;,&#39;&#39;,$string);
- $string = str_replace(&#39;<&#39;,&#39;<&#39;,$string);
- $string = str_replace(&#39;>&#39;,&#39;>&#39;,$string);
- $string = str_replace("{",&#39;&#39;,$string);
- $string = str_replace(&#39;}&#39;,&#39;&#39;,$string);
- return $string;
- }
-
-
-
-
- function htmldecode($str) {
- if (emptyempty ( $str ) || "" == $str) {
- return "";
- }
-
- $str = strip_tags ( $str );
- $str = htmlspecialchars ( $str );
- $str = nl2br ( $str );
- $str = str_replace ( "?", "", $str );
- $str = str_replace ( "*", "", $str );
- $str = str_replace ( "!", "", $str );
- $str = str_replace ( "~", "", $str );
- $str = str_replace ( "$", "", $str );
- $str = str_replace ( "%", "", $str );
- $str = str_replace ( "^", "", $str );
- $str = str_replace ( "^", "", $str );
- $str = str_replace ( "select", "", $str );
- $str = str_replace ( "join", "", $str );
- $str = str_replace ( "union", "", $str );
- $str = str_replace ( "where", "", $str );
- $str = str_replace ( "insert", "", $str );
- $str = str_replace ( "delete", "", $str );
- $str = str_replace ( "update", "", $str );
- $str = str_replace ( "like", "", $str );
- $str = str_replace ( "drop", "", $str );
- $str = str_replace ( "create", "", $str );
- $str = str_replace ( "modify", "", $str );
- $str = str_replace ( "rename", "", $str );
- $str = str_replace ( "alter", "", $str );
- $str = str_replace ( "cast", "", $str );
-
- $farr = array ("//s+/", //过滤多余的空白
- "/<(//?)(img|script|i?frame|style|html|body|title|link|meta|/?|/%)([^>]*?)>/isU", //过滤
- "/(<[^>]*)on[a-zA-Z]+/s*=([^>]*>)/isU" )
- ;
- $tarr = array (" ", "",
- "" );
- return $str;
- }
推荐阅读
-
涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ...
[详细]
蜡笔小新 2024-11-24 10:29:06
-
本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ...
[详细]
蜡笔小新 2024-11-24 09:54:53
-
-
本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ...
[详细]
蜡笔小新 2024-11-24 09:51:34
-
本文详细记录了一次在Windows操作系统下将Oracle数据库的控制文件、数据文件及在线日志文件迁移至外部存储的过程,旨在为后续的集群环境部署做好准备。 ...
[详细]
蜡笔小新 2024-11-23 19:57:51
-
权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ...
[详细]
蜡笔小新 2024-11-23 16:30:15
-
本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ...
[详细]
蜡笔小新 2024-11-23 15:50:03
-
本文详细介绍了如何在PHP的Smarty模板引擎中自定义函数,并通过具体示例演示了这些函数的使用方法和应用场景。适合PHP后端开发者学习。 ...
[详细]
蜡笔小新 2024-11-23 15:39:25
-
本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ...
[详细]
蜡笔小新 2024-11-23 12:47:16
-
本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ...
[详细]
蜡笔小新 2024-11-23 20:11:23
-
本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ...
[详细]
蜡笔小新 2024-11-23 19:22:14
-
本文详细探讨了如何根据不同的应用场景选择合适的PHP版本,包括多版本切换技巧、稳定性分析及针对WordPress等特定平台的版本建议。 ...
[详细]
蜡笔小新 2024-11-23 17:00:59
-
本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ...
[详细]
蜡笔小新 2024-11-23 16:56:38
-
本文介绍了用户界面(User Interface, UI)的基本概念,以及在iOS应用程序中UIView及其子类的重要性和使用方式。文章详细探讨了UIView如何作为用户交互的核心组件,以及它与其他UI控件和业务逻辑的关系。 ...
[详细]
蜡笔小新 2024-11-23 16:25:09
-
本文探讨了线性表中元素的删除方法,包括顺序表和链表的不同实现策略,以及这些策略在实际应用中的性能分析。 ...
[详细]
蜡笔小新 2024-11-23 16:14:36
-
本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ...
[详细]
蜡笔小新 2024-11-23 13:45:37
-
手机用户2602914917
这个家伙很懒,什么也没留下!