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

如何在php中修补XSS漏洞

文章作者:Langy
译文作者:riusksk
在PHP中修补XSS漏洞,我们可以使用三个PHP函数。
这些函数主要用于清除HTML标志,这样就没办法注入代码了。使用更多的函数是htmlspecialchars() ,它可以将所有的"<"与">"符号转换成"<" 与">"。其它可供选择的函数还有htmlentities(), 它可以用相应的字符实体(entities)替换掉所有想要替换掉的特征码(characters)。
PHP Code:

1 <?
2 // 这里的代码主要用于展示这两个函数之间输出的不同
3 $input '&lt;script&gt;alert(1);&lt;/script&gt;';
4 echo htmlspecialchars($input) . '&lt;br /&gt;';
5 echo htmlentities($input);
6 ?>;

htmlentities()的另一个例子
PHP Code:

1 <?php
2 $str "A 'quote' is &lt;b&gt;bold&lt;/b&gt;";
3 echo htmlentities($str);
4 echo htmlentities($str, ENT_QUOTES);
5 ?>;

第一个显示: A 'quote' is &amp;lt;b&amp;gt;bold&amp;lt;/b&amp;gt;
第二个显示:A 'quote' is &amp;lt;b&amp;gt;bold&amp;lt;/b&amp;gt;
htmlspecialchars()使用实例
PHP Code:

1 <?php
2 $new = htmlspecialchars("&lt;a href='test'&gt;Test&lt;/a&gt;", ENT_QUOTES);
3 echo $new;
4 ?>;

显示: &amp;lt;a href='test'&amp;gt;Test&amp;lt;/a&amp;gt;
strip_tags()函数代替.删除所有的HTML元素(elements),除了需要特别允许的元素之外,如:&lt;i&gt;, &lt;b&gt; 或&lt;p&gt;.
strip_tags()使用实例
PHP Code:

1 <?php
2 $text '&lt;p&gt;Test paragraph.&lt;/p&gt;&lt;!-- Comment --&gt; Other text';
3 echo strip_tags($text);
4 echo "\n";
5 // allow &lt;p&gt;
6 echo strip_tags($text'&lt;p&gt;');
7 ?>;

 

现在我们至少已经知道有这些函数了,当我们发现我们的站点存在XSS漏洞时就可以使用这些代码了。我最近在我的站点上的GoogleBig(一个Mybb论坛的插件)视频部分发现了一个XSS漏洞,因此我就在想如何使用这些函数写段代码来修补这个搜索漏洞。
首先我发现问题出在search.php这一文件上,现在让我们看看这个查询及输出查询结果中的部分代码研究一下:
PHP Code:

01 function search($query$page)
02 {
03     global $db$bgcolor2$bgcolor4$sitename$io_db$module_url,$list_page_items$hm_index;
04     $option = trim($option);
05     $query = trim($query);
06     $query = FixQuotes(nl2br(filter_text($query)));
07     $db-&gt;escape_string($query);
08     $db-&gt;escape_string($option);
09         alpha_search($query);
10     ...

 

在这种情况下,我们通过使用$query这一值作为变量,然后使用htmlentities()这一函数:
PHP Code:

1 $query = FixQuotes(nl2br(filter_text(htmlentities($query))));

如果你对这三种函数还有有疑问可以使用PHP手册来查看:
http://it.php.net/htmlentities

http://it2.php.net/htmlspecialchars

http://it2.php.net/strip_tags
 

相关文章:

  • wordpress 拿webshell
  • 基于php+Mysql的SQL Injection 攻击技术
  • 入侵后完美清理日志的总结
  • Linux命令行下WEP密码破解(通用,也可非BT平台)
  • FOR语句提权中基础语法
  • 打造LINUX系统安全
  • Kivlad--Android上的二进制文件的反编译工具
  • IT 缩略语
  • CDN获取真实IP
  • Dede CMS All Versions SQL
  • SQLMAP使用方法
  • 解决Fckeditor删除所有上传页面如何上传
  • shell突破web防火墙访问
  • serv-u最新通杀所有版本0day
  • Nginx简单防御CC攻击
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [译]如何构建服务器端web组件,为何要构建?
  • bootstrap创建登录注册页面
  • CSS实用技巧干货
  • golang中接口赋值与方法集
  • javascript面向对象之创建对象
  • mockjs让前端开发独立于后端
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Redis学习笔记 - pipline(流水线、管道)
  • SQLServer插入数据
  • supervisor 永不挂掉的进程 安装以及使用
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 我从编程教室毕业
  • 译有关态射的一切
  • 在electron中实现跨域请求,无需更改服务器端设置
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #、%和$符号在OGNL表达式中经常出现
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #Spring-boot高级
  • (C)一些题4
  • (附源码)php投票系统 毕业设计 121500
  • (六)vue-router+UI组件库
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (算法)N皇后问题
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转载)虚函数剖析
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET 8.0 发布到 IIS
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET开发者必备的11款免费工具