热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php过滤特殊危险字符的总结

在网站中表单提交或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教程 > php函数 > 列表
php过滤特殊危险字符的总结
发布: 来源:  添加日期:2014-08-21 15:39:32 浏览: 评论:0 

在网站中表单提交或url获取值我们都可能碰到一些安全问题,下面我总结了一些常用的过滤一些危险特殊字符的解决方法,一般,对于传进来的字符,php可以用addslashes函数处理一遍(要get_magic_quotes_gpc()为假才处理,不然就重复转义了!),这样就能达到一定程度的安全要求,比如这样,代码如下:

  1. if (!get_magic_quotes_gpc()) {      
  2.      add_slashes($_GET);      
  3.      add_slashes($_POST);      
  4.      add_slashes($_COOKIE);      
  5. }      
  6.       
  7. function add_slashes($string) {      
  8.      if (is_array($string)) {      
  9.          foreach ($string as $key => $value) {      
  10.              $string[$key] = add_slashes($value);      
  11.          }      
  12.      } else {      
  13.          $string = addslashes($string);      
  14.      }  
  15.      return $string;      

但是还可以更进一步进行重新编码,解码,代码如下:

//编码 
  1. function htmlencode($str) {       
  2.       if(emptyempty($str)) return;  
  3.       if($str==""return $str;        
  4.       $str=trim($str);  
  5.       $str=str_replace("&","&",$str);  
  6.       $str=str_replace(">",">",$str);  
  7.       $str=str_replace("<","<",$str);  
  8.       $str=str_replace(chr(32)," ",$str);  
  9.       $str=str_replace(chr(9)," ",$str);  
  10.       $str=str_replace(chr(34),"&",$str);  
  11.       $str=str_replace(chr(39),"&#39;",$str);  
  12.       $str=str_replace(chr(13),"",$str);  
  13.       $str=str_replace("&#39;","&#39;&#39;",$str);  
  14.       $str=str_replace("select","sel&#101;ct",$str);  
  15.       $str=str_replace("join","jo&#105;n",$str);  
  16.       $str=str_replace("union","un&#105;on",$str);  
  17.       $str=str_replace("where","wh&#101;re",$str);  
  18.       $str=str_replace("insert","ins&#101;rt",$str);  
  19.       $str=str_replace("delete","del&#101;te",$str);  
  20.       $str=str_replace("update","up&#100;ate",$str);  
  21.       $str=str_replace("like","lik&#101;",$str);  
  22.       $str=str_replace("drop","dro&#112;",$str);  
  23.       $str=str_replace("create","cr&#101;ate",$str);  
  24.       $str=str_replace("modify","mod&#105;fy",$str);  
  25.       $str=str_replace("rename","ren&#097;me",$str);  
  26.       $str=str_replace("alter","alt&#101;r",$str);  
  27.       $str=str_replace("cast","ca&#115;",$str);        
  28.       return $str;   

这样就能更放心的对外来数据进行入库处理了,但是从数据库取出来,在前台显示的时候,必须重新解码一下,代码如下:

  1. //解码 
  2.  
  3. function htmldecode($str) {       
  4.       if(emptyempty($str)) return;  
  5.       if($str=="")  return $str;  
  6.       $str=str_replace("sel&#101;ct","select",$str);  
  7.       $str=str_replace("jo&#105;n","join",$str);  
  8.       $str=str_replace("un&#105;on","union",$str);  
  9.       $str=str_replace("wh&#101;re","where",$str);  
  10.       $str=str_replace("ins&#101;rt","insert",$str);  
  11.       $str=str_replace("del&#101;te","delete",$str);  
  12.       $str=str_replace("up&#100;ate","update",$str);  
  13.       $str=str_replace("lik&#101;","like",$str);  
  14.       $str=str_replace("dro&#112;","drop",$str);  
  15.       $str=str_replace("cr&#101;ate","create",$str);  
  16.       $str=str_replace("mod&#105;fy","modify",$str);  
  17.       $str=str_replace("ren&#097;me","rename",$str);  
  18.       $str=str_replace("alt&#101;r","alter",$str);  
  19.       $str=str_replace("ca&#115;","cast",$str);  
  20.       $str=str_replace("&","&",$str);  
  21.       $str=str_replace(">",">",$str);  
  22.       $str=str_replace("<","<",$str);  
  23.       $str=str_replace(" ",chr(32),$str);  
  24.       $str=str_replace(" ",chr(9),$str);  
  25.       $str=str_replace("&",chr(34),$str);  
  26.       $str=str_replace("&#39;",chr(39),$str);  
  27.       $str=str_replace("",chr(13),$str);  
  28.       $str=str_replace("&#39;&#39;","&#39;",$str);   //开源代码phpfensi.com     
  29.       return $str;  

虽然多了一步编码,解码的过程,但是安全方面,会更进一步,要如何做,自己取舍吧.

再附一些代码如下:

  1. function safe_replace($string) { 
  2.  $string = str_replace(&#39; &#39;,&#39;&#39;,$string); 
  3.  $string = str_replace(&#39;&#39;&#39;,&#39;&#39;,$string); 
  4.  $string = str_replace(&#39;&#39;&#39;,&#39;&#39;,$string); 
  5.  $string = str_replace(&#39;*&#39;,&#39;&#39;,$string); 
  6.  $string = str_replace(&#39;"&#39;,&#39;"&#39;,$string); 
  7.  $string = str_replace("&#39;",&#39;&#39;,$string); 
  8.  $string = str_replace(&#39;"&#39;,&#39;&#39;,$string); 
  9.  $string = str_replace(&#39;;&#39;,&#39;&#39;,$string); 
  10.  $string = str_replace(&#39;<&#39;,&#39;<&#39;,$string); 
  11.  $string = str_replace(&#39;>&#39;,&#39;>&#39;,$string); 
  12.  $string = str_replace("{",&#39;&#39;,$string); 
  13.  $string = str_replace(&#39;}&#39;,&#39;&#39;,$string); 
  14.  return $string
  15.  
  16. //更全面的代码如下: 
  17.  
  18. //处理提交的数据  
  19. function htmldecode($str) {  
  20.  if (emptyempty ( $str ) || "" == $str) {  
  21.  return "";  
  22.  }  
  23.    
  24.  $str = strip_tags ( $str );  
  25.  $str = htmlspecialchars ( $str );  
  26.  $str = nl2br ( $str );  
  27.  $str = str_replace ( "?"""$str );  
  28.  $str = str_replace ( "*"""$str );  
  29.  $str = str_replace ( "!"""$str );  
  30.  $str = str_replace ( "~"""$str );  
  31.  $str = str_replace ( "$"""$str );  
  32.  $str = str_replace ( "%"""$str );  
  33.  $str = str_replace ( "^"""$str );  
  34.  $str = str_replace ( "^"""$str );  
  35.  $str = str_replace ( "select"""$str );  
  36.  $str = str_replace ( "join"""$str );  
  37.  $str = str_replace ( "union"""$str );  
  38.  $str = str_replace ( "where"""$str );  
  39.  $str = str_replace ( "insert"""$str );  
  40.  $str = str_replace ( "delete"""$str );  
  41.  $str = str_replace ( "update"""$str );  
  42.  $str = str_replace ( "like"""$str );  
  43.  $str = str_replace ( "drop"""$str );  
  44.  $str = str_replace ( "create"""$str );  
  45.  $str = str_replace ( "modify"""$str );  
  46.  $str = str_replace ( "rename"""$str );  
  47.  $str = str_replace ( "alter"""$str );  
  48.  $str = str_replace ( "cast"""$str );  
  49.    
  50.  $farr = array ("//s+/", //过滤多余的空白  
  51. "/<(//?)(img|script|i?frame|style|html|body|title|link|meta|/?|/%)([^>]*?)>/isU", //过滤 
  52. "/(<[^>]*)on[a-zA-Z]+/s*=([^>]*>)/isU" )//过滤Javascript的on事件  
  53. ;  
  54.  $tarr = array (" """//如果要直接清除不安全的标签,这里可以留空  
  55. "" );  
  56.  return $str;  

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