我想将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上的网站,它将是一个非持久的弱势群体。也许我只能在开发人员登录时才允许预览。
*我说我的服务器,然后我感到颤抖。所以这就是我在这里问这个问题的原因。如果我发布到他们的服务器(他们必须有一台服务器)怎么办?我会觉得更安全,但开发人员必须拥有自己的服务器(也许是一件好事)。
答案 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元素及其属性。