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脚本的10个技巧(5)
Oct 09 PHP
文件上传程序的全部源码
Oct 09 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
php类声明和php类使用方法示例分享
Mar 29 PHP
php购物车实现方法
Jan 03 PHP
PHP获取文件夹内文件数的方法
Mar 12 PHP
php使用GD实现颜色渐变实例
Jun 02 PHP
Yii框架组件和事件行为管理详解
May 20 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
Thinkphp框架中D方法与M方法的区别
Dec 23 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
Aug 04 PHP
php-fpm重启导致的程序执行中断问题详解
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
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
2011/03/29 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
浅谈从React渲染流程分析Diff算法
2018/09/08 Javascript
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
python生成指定尺寸缩略图的示例
2014/05/07 Python
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
汽车促销活动方案
2014/03/31 职场文书
临时租车协议范本
2014/09/23 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
警示教育观后感
2015/06/17 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
公司考勤管理制度
2015/08/04 职场文书
法制主题班会教案
2015/08/13 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS