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 相关文章推荐
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
php中利用post传递字符串重定向的实现代码
Apr 21 PHP
解析centos中Apache、php、mysql 默认安装路径
Jun 25 PHP
php中通过数组进行高效随机抽取指定条记录的算法
Sep 09 PHP
php读取csv数据保存到数组的方法
Jan 03 PHP
PHP Streams(流)详细介绍及使用
May 12 PHP
PHP常见数组函数用法小结
Mar 21 PHP
CodeIgniter集成smarty的方法详解
May 26 PHP
PHP的AES加密算法完整实例
Jul 20 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
Nov 05 PHP
php的无刷新操作实现方法分析
Feb 28 PHP
PHP实现rar解压读取扩展包小结
Jun 03 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限制ip地址范围的方法
2015/03/31 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
javascript preload&amp;lazy load
2010/05/13 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
跟我学习javascript的严格模式
2015/11/16 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
js 调用百度分享功能
2017/02/27 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
vue-cli如何引入bootstrap工具的方法
2017/10/19 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
Python中的ceil()方法使用教程
2015/05/14 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
python 对象和json互相转换方法
2018/03/22 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
自动化系在校本科生求职信
2013/10/23 职场文书
测控技术与仪器个人求职信范文
2013/12/30 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
入党综合考察材料
2014/06/02 职场文书
明星员工获奖感言
2014/08/14 职场文书
Python中的变量与常量
2021/11/11 Python