PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】


Posted in PHP onApril 27, 2019

本文实例总结了PHP常用工具函数。分享给大家供大家参考,具体如下:

移除XSS攻击脚本

function RemoveXSS($val) {
    // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
    // this prevents some character re-spacing such as <java\0script>
    // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
    $val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);
    // straight replacements, the user should never need these since they're normal characters
    // this prevents like <IMG SRC=@avascript:alert('XSS')>
    $search = 'abcdefghijklmnopqrstuvwxyz';
    $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $search .= '1234567890!@#$%^&*()';
    $search .= '~`";:?+/={}[]-_|\'\\';
    for ($i = 0; $i < strlen($search); $i++) {
      // ;? matches the ;, which is optional
      // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
      // @ @ search for the hex values
      $val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
      // @ @ 0{0,7} matches '0' zero to seven times
      $val = preg_replace('/(�{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
    }
    // now the only remaining whitespace attacks are \t, \n, and \r
    $ra1 = array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
    $ra2 = array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
    $ra = array_merge($ra1, $ra2);
    $found = true; // keep replacing as long as the previous round replaced something
    while ($found == true) {
      $val_before = $val;
      for ($i = 0; $i < sizeof($ra); $i++) {
        $pattern = '/';
        for ($j = 0; $j < strlen($ra[$i]); $j++) {
          if ($j > 0) {
            $pattern .= '(';
            $pattern .= '(&#[xX]0{0,8}([9ab]);)';
            $pattern .= '|';
            $pattern .= '|(�{0,8}([9|10|13]);)';
            $pattern .= ')*';
          }
          $pattern .= $ra[$i][$j];
        }
        $pattern .= '/i';
        $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag
        $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
        if ($val_before == $val) {
          // no replacements were made, so exit the loop
          $found = false;
        }
      }
    }
    return $val;
}

GBK转UTF8

function GBKtoUTF8($str)
{
  if(is_array($str))
  {
    foreach ($str as &$value)
    {
      $value = GBKtoUTF8($value);
    }
    return $str;
  }elseif(is_string($str)){
    $str = iconv("GB18030", "UTF-8//IGNORE", $str);
    return $str;
  }else{
    return $str;
  }
}

UTF8转GBK

function UTF8toGBK(&$str)
{
  if(is_array($str))
  {
    foreach ($str as &$value)
    {
      $value = UTF8toGBK($value);
    }
    return $str;
  }elseif (is_string($str)){
    $str = iconv("UTF-8", "GB18030//IGNORE", $str);
    return $str;
  }else{
    return $str;
  }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php绘图中显示不出图片的原因及解决
Mar 05 PHP
简单实用的PHP防注入类实例
Dec 05 PHP
fckeditor上传文件按日期存放及重命名方法
May 22 PHP
PHP中Http协议post请求参数
Nov 02 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
基于thinkPHP框架实现留言板的方法
Oct 17 PHP
php获取当前月与上个月月初及月末时间戳的方法
Dec 05 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
Mar 19 PHP
Ajax+PHP实现的分类列表框功能示例
Feb 11 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 PHP
PHP连接MySQL数据库三种实现方法
Dec 10 PHP
PHP操作路由器实现方法示例
Apr 27 #PHP
PHP切割汉字的常用方法实例总结
Apr 27 #PHP
YII框架常用技巧总结
Apr 27 #PHP
YII框架行为behaviors用法示例
Apr 26 #PHP
YII框架模块化处理操作示例
Apr 26 #PHP
Yii框架ACF(accessController)简单权限控制操作示例
Apr 26 #PHP
YII框架实现自定义第三方扩展操作示例
Apr 26 #PHP
You might like
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
有关PHP 中 config.m4 的探索
2020/08/26 PHP
一个选择最快的服务器转向代码
2009/04/27 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
简介JavaScript中toTimeString()方法的使用
2015/06/12 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
vue实现计步器功能
2019/11/01 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
Python logging模块handlers用法详解
2020/08/14 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
三八红旗手先进事迹材料
2014/05/13 职场文书
数学备课组工作总结
2015/08/12 职场文书
Go各时间字符串使用解析
2021/04/02 Golang
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
Nginx配置根据url参数重定向
2022/04/11 Servers
Python内置的数据类型及使用方法
2022/04/13 Python
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript