当前位置: 首页 > news >正文

php项目ueditor上传pdf文件,防止XSS攻击

做渗透测试的时候,ueditor附件上传一个包含javascript代码的pdf文件,直接保存成功。

通过浏览器访问这个保存好的文件,会执行javascript代码。被评定为高危漏洞。

项目使用的ueditor1.4.*,发现ueditor只做了文件大小和后缀的验证,没有做内容是否包含javascript代码的验证。

思路是在ueditor处理文件上传成临时文件验证的地方(移动之前),加上验证,不通过就直接返回,跳过文件移动。

修改ueditor包含的Uploader.class.php文件可以实现

1、添加ERROR_XSS错误提示,只加末尾那一行

private $stateMap = array( //上传状态映射表,国际化用户需考虑此处数据的国际化"SUCCESS", //上传成功标记,在UEditor中内不可改变,否则flash判断会出错"文件大小超出 upload_max_filesize 限制","文件大小超出 MAX_FILE_SIZE 限制","文件未被完整上传","没有文件被上传","上传文件为空","ERROR_TMP_FILE" => "临时文件错误","ERROR_TMP_FILE_NOT_FOUND" => "找不到临时文件","ERROR_SIZE_EXCEED" => "文件大小超出网站限制","ERROR_TYPE_NOT_ALLOWED" => "文件类型不允许","ERROR_CREATE_DIR" => "目录创建失败","ERROR_DIR_NOT_WRITEABLE" => "目录没有写权限","ERROR_FILE_MOVE" => "文件保存时出错","ERROR_FILE_NOT_FOUND" => "找不到上传文件","ERROR_WRITE_CONTENT" => "写入文件内容错误","ERROR_UNKNOWN" => "未知错误","ERROR_DEAD_LINK" => "链接不可用","ERROR_HTTP_LINK" => "链接不是http链接","ERROR_HTTP_CONTENTTYPE" => "链接contentType不正确","ERROR_XSS" => "文件内容包含代码",);

2、添加一个验证方法,建议加在 private function  checkSize()方法后面:

/*** 文件内容检测* @return bool*/private function checkXSS($tmp_file){$text = file_get_contents($tmp_file);$text = str_replace(array("\r\n","\r","\n"), " ", $text);preg_match('/javascript/i', $text, $matches);if($matches){return false;}return true;}

3、upFile方法开头调用这个checkXSS方法验证

private function upFile(){$file = $this->file = $_FILES[$this->fileField];if (!$file) {$this->stateInfo = $this->getStateInfo("ERROR_FILE_NOT_FOUND");return;}if ($this->file['error']) {$this->stateInfo = $this->getStateInfo($file['error']);return;} else if (!file_exists($file['tmp_name'])) {$this->stateInfo = $this->getStateInfo("ERROR_TMP_FILE_NOT_FOUND");return;} else if (!is_uploaded_file($file['tmp_name'])) {$this->stateInfo = $this->getStateInfo("ERROR_TMPFILE");return;} else if (!$this->checkXSS($file['tmp_name'])) { //检查是否包含javascript代码$this->stateInfo = $this->getStateInfo("ERROR_XSS");return;}
// 加了上面末尾三行

http://www.dtcms.com/a/581413.html

相关文章:

  • 876. 链表的中间结点
  • 排序算法:堆排序、快速排序、归并排序
  • qData 数据中台开源版 v1.0.7 发布:新增 SQL Server 支持,快速部署支持达梦与 MySQL 主库切换!
  • Qt 自定义加载动画控件:带文字提示的等待 spinner 实现
  • 织梦做淘宝客网站视频教程移动互联网开发找工作
  • Vue3 任务管理器(Pinia 练习)
  • 没有域名可以做网站吗个人网页设计绘画作品
  • 百胜软件做客华为云生态直播间:全渠道中台如何赋能零售数字化与全球布局?
  • 航电系统架构演进与要点概述
  • 华为云ELB
  • 医疗智能体(eiHealth) 3.4.0 使用指南(for 华为云Stack 8.5.0) 0. 华为除了这个 还有医疗 和生信方面的 产品
  • 写作教学网站wordpress 管理员账号在哪里查询
  • 完善服务终端:一洽对话结束与异常场景提示语设置
  • 从阿里云大模型服务平台百炼看AI应用集成与实践
  • 【图像处理】图像的基础几何变换
  • uniapp + uni-ui + vue3转cli
  • 户外保险网站wordpress icon 插件
  • config.json 完全指南:项目配置的核心实践
  • 【App开发】ADB 详细使用教程- Android 开发新人指南
  • 如何提高网站访客数重庆关键词排名首页
  • 天猫、飞猪打通了迪士尼会员权益 IP 商业化迈入“全域变现”时代
  • 第八章 惊喜22 批判性思维
  • wordpress主题模板视频网站模板实搜网站建设
  • 第1章 SLAM技术导论
  • 测试之bug篇
  • 万全县城乡建设网站企业网站建设的目的是什么
  • 网站建设资源平台地方门户网站的分类
  • VS + Qt 开发多语言,中英文
  • 游戏开发入门,简单小游戏原理-关于2D渲染的一些小想法
  • Bootstrap4 徽章(Badges)