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维护文件系统
Oct 09 PHP
php自定义函数之递归删除文件及目录
Aug 08 PHP
关于UEditor编辑器远程图片上传失败的解决办法
Aug 31 PHP
smarty 缓存控制前的页面静态化原理
Mar 15 PHP
php自定义加密与解密程序实例
Dec 31 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
Jan 12 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
Mar 21 PHP
PDO的安全处理与事物处理方法
Oct 31 PHP
关于Laravel Route重定向的一个注意点
Jan 16 PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
Oct 09 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自动反斜杠的函数代码
2010/01/05 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
收集的10个免费的jQuery相册
2011/02/26 Javascript
javascript中的缓动效果实现程序
2012/12/29 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
浅析JS获取url中的参数实例代码
2016/06/14 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
使用python将mdb数据库文件导入postgresql数据库示例
2014/02/17 Python
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
python使用nntp读取新闻组内容的方法
2015/05/08 Python
Python实时获取cmd的输出
2015/12/13 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
python中实现栈的三种方法
2020/12/19 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
大学生关于奋斗的演讲稿
2014/01/09 职场文书
优质服务活动实施方案
2014/05/02 职场文书
水电站项目建议书
2014/05/12 职场文书
开学典礼演讲稿
2014/05/23 职场文书
爬山的活动方案
2014/08/16 职场文书
2014最新实习证明模板
2014/10/02 职场文书
单位租房协议书样本
2014/10/30 职场文书
创业计划书之寿司
2019/07/19 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
关于python中模块和重载的问题
2021/11/02 Python