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;
- }
推荐阅读
-
PHP与MySQL的Web应用开发技术深入解析 ...
[详细]
蜡笔小新 2024-11-05 18:30:33
-
本文总结了C++初学者需要掌握的关键知识点,特别强调了成员类型的区分。其中,protected成员与private成员在本类中的作用相同,但protected成员允许派生类的成员函数访问,而private成员则不允许。此外,文章还介绍了其他重要的C++基础概念,如类的构造函数、析构函数以及继承机制,为初学者提供了一个全面的学习指南。 ...
[详细]
蜡笔小新 2024-11-05 12:09:17
-
-
在使用Block时,正确的声明方法和确保线程安全是至关重要的。为了保证Block在堆中分配,应使用`copy`修饰符进行声明,因为栈中的Block与栈的生命周期绑定,容易导致内存问题。此外,还需注意Block捕获外部变量的行为,以避免潜在的循环引用和数据不一致问题。建议深入研究相关文档,以掌握更多高级技巧和最佳实践。 ...
[详细]
蜡笔小新 2024-11-05 10:57:33
-
在Python网络编程中,多线程技术的应用与优化是提升系统性能的关键。线程作为操作系统调度的基本单位,其主要功能是在进程内共享内存空间和资源,实现并行处理任务。当一个进程启动时,操作系统会为其分配内存空间,加载必要的资源和数据,并调度CPU进行执行。每个进程都拥有独立的地址空间,而线程则在此基础上进一步细化了任务的并行处理能力。通过合理设计和优化多线程程序,可以显著提高网络应用的响应速度和处理效率。 ...
[详细]
蜡笔小新 2024-11-04 19:37:38
-
深入理解Linux网络编程:UDP协议实战解析 ...
[详细]
蜡笔小新 2024-11-04 19:32:15
-
PHP开发人员薪资水平分析:工程师平均工资概况 ...
[详细]
蜡笔小新 2024-11-04 17:10:56
-
在正式踏上Linux学习之旅之前,本课程将引导你深入体验和部署Ubuntu系统。通过详细的操作步骤和实践演练,你将掌握Ubuntu的基本安装、配置及常用命令,为后续的进阶学习打下坚实的基础。此外,课程还将介绍如何解决常见问题和优化系统性能,帮助你更加高效地使用Ubuntu。 ...
[详细]
蜡笔小新 2024-11-04 14:41:20
-
经过近十年的技术革新,物联网已悄然渗透到日常生活中,对社会产生了深远影响。本文将详细解析当前物联网领域的十大核心关键技术,包括但不限于:1. 军事物联网技术,该技术通过先进的感知设备实现战场环境的实时监测与数据传输,提升作战效能和决策效率。其他关键技术还包括传感器网络、边缘计算、大数据分析等,这些技术共同推动了物联网的快速发展和广泛应用。 ...
[详细]
蜡笔小新 2024-11-05 19:25:03
-
源代码是构建网站的基础,涵盖了网站程序的所有代码、文件和目录结构。掌握源代码意味着完全控制网站的所有权。在传统自助建站平台中,由于采用SAAS模式,源代码通常不对外开放,用户实际上每年支付的费用仅是为了使用这些平台提供的服务,而无法获得真正的代码所有权。相比之下,米拓源代码提供了全面的技术细节和实现方法,使开发者能够深入了解并自主定制网站功能,确保了更高的灵活性和安全性。 ...
[详细]
蜡笔小新 2024-11-05 15:23:03
-
最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ...
[详细]
蜡笔小新 2024-11-05 09:20:37
-
本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ...
[详细]
蜡笔小新 2024-11-05 06:40:19
-
本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ...
[详细]
蜡笔小新 2024-11-04 20:11:40
-
本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ...
[详细]
蜡笔小新 2024-11-04 19:18:15
-
关系型数据库管理系统(RDBMS)的核心术语包括:数据库,即一组相互关联的表;数据表,表现为数据的二维结构,类似于电子表格;列,用于存储同一类型的数据元素,如邮政编码等。这些术语在RDBMS的设计和应用中具有重要意义。 ...
[详细]
蜡笔小新 2024-11-04 19:03:19
-
本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ...
[详细]
蜡笔小新 2024-11-04 14:29:34
-
手机用户2602914917
这个家伙很懒,什么也没留下!