安全地将帖子数据显示到PHP页面

时间:2013-07-30 06:49:22

标签: php

我想将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上的网站,它将是一个非持久的弱势群体。也许我只能在开发人员登录时才允许预览。

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

3 个答案:

答案 0 :(得分:2)

  

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

不使用您的代码。人们可能会被欺骗用JavaScript提交恶意HTML。请参阅Cross Site Scripting

  

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

echo PHP不会产生任何重大影响。您必须eval 提交的数据才会导致问题。

您需要担心的是恶意客户端代码。见What are the common defenses against XSS?

答案 1 :(得分:1)

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

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

如果对Web开发中的安全性存在疑问,请务必咨询

https://www.owasp.org/index.php/Main_Page

答案 2 :(得分: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));

?>

您可以看到我在强标记中添加了一个onclick属性,该属性将显示警告。 您还发现,当您想要允许某些标签时,这不是一件容易的事。

您可能希望编写一个自己的Filter类实现,它可以执行您想要的操作,或者在Internet上搜索。

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