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 相关文章推荐
MySQL连接数超过限制的解决方法
Jul 17 PHP
thinkphp的c方法使用示例
Feb 24 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
PHP学习笔记(二):变量详解
Apr 17 PHP
通过Email发送PHP错误的方法
Jul 20 PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 PHP
php数组函数array_walk用法示例
May 26 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
Aug 08 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
PHP注释语法规范与命名规范详解篇
Jan 21 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
Jan 17 PHP
php实现的表单验证类完整示例
Aug 13 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
MySQL数据源表结构图示
2008/06/05 PHP
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
PHP is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
网页自动跳转代码收集
2009/09/27 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
python基于queue和threading实现多线程下载实例
2014/10/08 Python
Python标准库内置函数complex介绍
2014/11/25 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
Django开发的简易留言板案例详解
2018/12/04 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
Python分类测试代码实例汇总
2020/07/23 Python
Css3新特性应用之形状总结
2016/12/08 HTML / CSS
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
英智兴达软件测试笔试题
2016/10/12 面试题
优秀教师演讲稿
2014/05/06 职场文书
财产保全担保书
2015/01/20 职场文书
网络管理员岗位职责
2015/02/12 职场文书
在校生证明
2015/06/17 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL