0

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

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

4

1 回答 1

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也是一种非常简单的清理形式;它是有效的,因为这意味着您可以保证获得一个无害的数字,但该数字可能与用户提交的值有任何关系,也可能没有任何关系。验证可能是这里更好的选择。

于 2013-06-05T11:25:55.683 回答