我很想知道如果用户提交表单时正在检索的数据已经被过滤,是否有必要从 MySQL 服务器转义输出。
示例:
1. 用户提交一个包含博客文章评论的表单。
2. 在表单提交时,在将数据发送到 MySQL 服务器之前,他们的输入被过滤FILTER_SANITIZE_SPECIAL_CHARS以防止注入攻击。
3. 一旦数据被发布到服务器,用户将被重新路由到另一个屏幕,在那里他们可以查看他们的评论。
4. 当从服务器(已存储过滤的输入)检索他们的评论时,是否也需要转义此输出?
这是我的主要问题。我正在从表单(对于博客文章)获取用户输入,使用 对其进行清理FILTER_SANITIZE_SPECIAL_CHARS,然后将其发布到 MySQL 服务器。如果我从服务器检索此信息并将其显示在 html 中,则没有问题。但是,我一直在读到您也应该始终从服务器转义输出。所以我用htmlspecialchars(). 现在,我遇到的问题是所有特殊字符(包括括号,以及用户在其帖子中使用的任何引号)都以其转义的 html 格式返回。不是用户友好的。
什么是最好的解决方法,或者如果输出来自服务器并且已经根据用户输入进行了清理,甚至有必要转义它吗?