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 相关文章推荐
无限级别菜单的实现
Oct 09 PHP
PHP 数组遍历方法大全(foreach,list,each)
Jun 30 PHP
php的ajax框架xajax入门与试用介绍
Dec 19 PHP
php新建文件自动编号的思路与实现
Jun 27 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
Sep 09 PHP
php中cookie实现二级域名可访问操作的方法
Nov 11 PHP
ThinkPHP自动完成中使用函数与回调方法实例
Nov 29 PHP
php使用GD库创建图片缩略图的方法
Jun 10 PHP
在Windows系统下使用PHP生成Word文档的教程
Jul 03 PHP
thinkphp实现分页显示功能
Dec 03 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
May 26 PHP
php5.6.x到php7.0.x特性小结
Aug 17 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将数据库导出成excel的方法
2010/05/07 PHP
php抓取页面与代码解析 推荐
2010/07/23 PHP
PHP中通过加号合并数组的一个简单方法分享
2011/01/27 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
jquery使用经验小结
2015/05/20 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
使用JavaScript获取Request中参数的值方法
2016/09/27 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
获取url中用&amp;隔开的参数实例(分享)
2017/05/28 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
jQuery实现可编辑的表格
2019/12/11 jQuery
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
使用Python生成url短链接的方法
2015/05/04 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
python如何将两个txt文件内容合并
2019/10/18 Python
python入门之基础语法学习笔记
2020/02/08 Python
python中提高pip install速度
2020/02/14 Python
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
财务会计专业毕业生自荐信
2013/10/19 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
财务会计人员求职的自我评价
2014/01/13 职场文书
大学校务公开实施方案
2014/03/31 职场文书
收款委托书范本
2014/09/11 职场文书