【发布时间】:2017-06-06 12:00:15
【问题描述】:
假设用户将一些 PHP 代码 <?php //code here ?> 添加到输入文本标签中(在这种情况下他们不应该这样做),开始和结束标签会被转换为 &lt; 和 &gt; 还是会它们在内容可编辑的 div 中保持原样?
【问题讨论】:
标签: html validation input sanitization html-sanitizing
假设用户将一些 PHP 代码 <?php //code here ?> 添加到输入文本标签中(在这种情况下他们不应该这样做),开始和结束标签会被转换为 &lt; 和 &gt; 还是会它们在内容可编辑的 div 中保持原样?
【问题讨论】:
标签: html validation input sanitization html-sanitizing
用户输入只是附加到 DOM 中属性的原始文本。
它不是 HTML、PHP 或其他任何东西,直到它完成某些操作(例如提交的表单或 JavaScript 读取属性并对其进行操作)。
【讨论】:
原始文本将驻留在标准 HTML 输入中,用户输入的 PHP 代码不会被执行。
但是,根据您的代码对其执行的操作(将其发送到数据库或 Web 服务),如果未正确清理,攻击者可能会执行攻击。
因此,您应该始终致力于清理客户端和服务器端级别的用户输入,尤其是当它触发到数据库时。
不同的框架将支持清理。在 PHP 中,您可以访问以下sanitization filters。
作为参考,您还应该注意其他攻击,例如 SQL 注入/XSS。我建议查看 OWASP 前 10 名,其中概述了一些常见的 Web 攻击并讨论了PHP filters。
我在这里创建了一个非常基本的示例来反映用户输入,如果攻击者设法在您的数据库中保存恶意代码,则可能会发生这种情况:
var text = document.getElementById("test").value;
eval(text);
<input id="test" type="text" value="alert('I have access to you document cookies and could use a windows redirection here')" />
【讨论】: