使用 str_replace 防止 php 注入上传的 HTML 内容
Use str_replace to prevent php injection in uploaded HTML content
当客户端上传HTML内容到服务器时,我会检查并删除PHP标签以防止PHP注入。我读了一些帖子,他们几乎说我应该使用 preg_replace (regx)
或者更好的是,我应该将 html 解析为 DOMDocument
对象。但是,我认为这种方法将花费服务器时间。
据我所知,普通用户(非恶意用户)永远不会在 html 内容中使用 php 标签 (<?php, ...)
。如果他们想要显示 <?php
,编辑器会将 <
转换为 <
。因此,对于带有html 注入的恶意用户,我使用str_replace
将所有php 标记更改为评论。例如:
$htmlStr = str_replace("?php", "<!--?php", htmlStr);
$htmlStr = str_replace("?>", "?-->", htmlStr);
与使用preg_replace
或DOMDocument
相比不会花费时间。我知道内容可能会受到影响(例如,如果缺少标签 ?>
,所有内容都会转换为评论)。但是,它是恶意用户的内容。
这种方式有什么问题吗?我想的这么简单吗?
永远不要构建自己的反注入脚本实现,除非你真的知道你在做什么。
如果可能,阻止任何基于用户 HTML 的内容。如果不是,请使用现有解决方案,例如 HTML Purifier.
当客户端上传HTML内容到服务器时,我会检查并删除PHP标签以防止PHP注入。我读了一些帖子,他们几乎说我应该使用 preg_replace (regx)
或者更好的是,我应该将 html 解析为 DOMDocument
对象。但是,我认为这种方法将花费服务器时间。
据我所知,普通用户(非恶意用户)永远不会在 html 内容中使用 php 标签 (<?php, ...)
。如果他们想要显示 <?php
,编辑器会将 <
转换为 <
。因此,对于带有html 注入的恶意用户,我使用str_replace
将所有php 标记更改为评论。例如:
$htmlStr = str_replace("?php", "<!--?php", htmlStr);
$htmlStr = str_replace("?>", "?-->", htmlStr);
与使用preg_replace
或DOMDocument
相比不会花费时间。我知道内容可能会受到影响(例如,如果缺少标签 ?>
,所有内容都会转换为评论)。但是,它是恶意用户的内容。
这种方式有什么问题吗?我想的这么简单吗?
永远不要构建自己的反注入脚本实现,除非你真的知道你在做什么。
如果可能,阻止任何基于用户 HTML 的内容。如果不是,请使用现有解决方案,例如 HTML Purifier.