-1

我想将 HTML 代码发布到 PHP 页面,然后内联显示该 HTML。这样做安全吗?既然它是一个简单的表单,有人可以发布一个 PHP 而不是 HTML 吗?我使用什么代码来确保没有 PHP 提交到服务器?

更多细节:
这是我的 PHP 页面,

<HTML>
<body>
<textarea id="html_textarea"></textarea>
<button type=submit>Preview</button>

PREVIEW
<?PHP 
echo $_REQUEST['html_textarea'];
</PHP>

</body>
</HTML>

示例数据:

<div>Hello world</div>

我不想发生的是有人发布这些数据:

<?php 
// something malicious or not safe for work 
</php>

这有意义吗?

另一个更新
感谢所有帮助。我需要提供更多细节。我正在在线编写一个 HTML 编辑器。所以开发人员可以创建和编写他们的 HTML 页面,然后我想让他们预览他们的 HTML 页面。他们可以编写正文 HTML 并添加要包含的 CSS 和 JS 列表。

我可以为他们创建一个 HTML 页面,但我认为在服务器上动态创建 HTML 页面是不安全的(或者可能是?)。我想我应该让他们将他们的 HTML、CSS 和 JS 发布到我服务器上的 PHP 页面*,然后我将它们放在一起并显示出来。我的想法是这只是暂时的。但根据 XSS 上的网站,这将是一个非持久性漏洞。也许我只能在开发人员登录时才允许预览。

*我说我的服务器,然后我就发抖。所以这就是我在这里问这个问题的原因。如果我发布到他们的服务器怎么办(他们必须有一个服务器)。我会觉得更安全,但是开发人员必须拥有自己的服务器(也许是件好事)。

4

3 回答 3

2

我想将 HTML 代码发布到 PHP 页面,然后内联显示该 HTML。这样做安全吗?

不是你的代码。人们可能会被欺骗使用 JavaScript 提交恶意 HTML。请参阅跨站点脚本

既然它是一个简单的表单,有人可以发布一个 PHP 而不是 HTML 吗?

echoing PHP 不会有任何显着影响。您必须eval提交数据才能导致问题。

这是您需要担心的恶意客户端代码。请参阅针对 XSS 的常见防御措施是什么?

于 2013-07-30T06:53:32.530 回答
1

您应该始终使用白名单来逃避用户的输入。这也适用于 HTML(尤其是 Javascript),因为如果你不这样做,你就会受到 XSS 攻击。

所以你可以开始使用 php 已经提供的各种转义函数。最好使用库而不是自己编写的东西。

当对 Web 开发的安全性有疑问时,请务必咨询

https://www.owasp.org/index.php/Main_Page
于 2013-07-30T06:53:20.750 回答
1

正如您和其他人正确注意到的那样,您的代码容易受到 XSS 攻击。

PHP 的本机函数在这里不会有太大帮助,因为您希望解析 HTML。

我推荐你一个白名单。您需要去除白名单中未列出的所有标签。PHP 附带了 strip_tags() ,您可以在其中传递带有允许标签的字符串。但我不建议使用它,因为它对可能包含恶意内容的标签属性没有任何影响。例子:

<?php
$whitelist = array(
    '<strong>',
);

$text = '<script>alert("This malicious code will never be executed!");</script><strong onclick="alert(\'But this will!\');">Some Text</strong>';
echo strip_tags($text, implode('', $whitelist));

?>

你可以看到我在strong标签中添加了一个onclick属性,它会显示一个警报。您还看到,当您想要允许某些标签时,这不是一件容易的事。

您可能想要编写自己的 Filter 类实现来执行您想要的操作,或者您在 Internet 上进行搜索。

编写自己的文件时,请查看 DomDocument 类。您将能够访问 DOM 元素及其属性。

于 2013-07-30T07:07:45.833 回答