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的urlencode()URL编码函数浅析
Aug 09 PHP
php正则表达匹配中文问题分析小结
Mar 25 PHP
php的zip解压缩类pclzip使用示例
Mar 14 PHP
调试PHP程序的多种方法介绍
Nov 06 PHP
php查找字符串出现次数的方法
Dec 01 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
PHP中filter函数校验数据的方法详解
Jul 31 PHP
Yii数据模型中rules类验证器用法分析
Jul 15 PHP
yii通过小物件生成view的方法
Oct 08 PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 PHP
YII框架页面缓存操作示例
Apr 29 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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
基于xcache的配置与使用详解
2013/06/18 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
PHP可变函数学习小结
2015/11/29 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
JavaScript获取服务器时间的方法详解
2016/12/11 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )
2017/03/30 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
微信小程序实现评论功能
2018/11/28 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
用javascript实现倒计时效果
2021/02/09 Javascript
用Python遍历C盘dll文件的方法
2015/05/06 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
详解Python流程控制语句
2020/10/28 Python
python中os.remove()用法及注意事项
2021/01/31 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
英国工具中心:UK Tool Centre
2017/07/10 全球购物
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
财务人员个人求职信范文
2013/12/04 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL