什么时候不清理数据?

时间:2013-06-05 11:04:43

标签: php input sanitize

所以我一直在为一个小方案项目开发一个API,并且所有用户输入都不会直接用于SQL或显示给用户,所以我需要清理它吗?如果我做了我应该做的事情?

我目前正在检查以确定它们是否为整数,字符串,数组等,但除此之外我还需要做什么?

1 个答案:

答案 0 :(得分:1)

问题始终是用于什么目的?如果您只是从用户那里获取值,而不是执行任何内容(您只需存储和显示)他们),然后没有什么可以消毒的。如果你让这些价值“积极地”某些东西,你可能想要对它们进行消毒,以避免它们做你不喜欢的事情。

例如,您接受来自用户的HTML输入和想要 HTML格式的内容,但您希望避免XSS问题;在这种情况下,您需要有选择地删除HTML元素,即您想要清理输入。

// some HTML is allowed, but not everything
echo remove_unwanted_html_elements($_POST['content']);

如果OTOH你不允许解释HTML输入,即无论用户发布的内容是什么,只是在没有被解释为HTML的情况下直接显示给他,那么你不需要清理任何东西。您可能只需要根据目标格式转义内容。

// don't care what the user enters, just display it right back as is
echo htmlspecialchars($_POST['content']);

只有当您以某种不完全可预测的方式评估值时,才能进行清理。清理意味着获取值并更改为其他内容,通常从中删除内容。这必须非常有针对性和目的性,因为它可能是一个非常容易出错的操作;你不仅仅因为某种方式消毒数据。另一种选择是简单的验证,即检查一个值是否符合预期的规范,否则完全拒绝

即使用户输入的假定数字并将其转换为int,也是一种非常简单的消毒形式;它是有效的,因为它意味着您可以保证获得无害的数字,但该数字可能与用户提交的值有关,也可能没有任何关系。 验证可能是更好的选择。