【发布时间】:2012-03-27 11:13:08
【问题描述】:
我已经阅读了有关 SQL 注入、XSS 和其他安全问题的信息,并且正在尝试找出使用什么来保护公司的网站。
我们即将部署一个带有文本区域的简单“用户反馈”表单,以便用户告诉我们如何改进网站以增强他们的用户体验。
当用户在表单上按下“提交”时,我们从用户那里读取 textarea cmets,然后以编程方式在该用户的子文件夹中创建一个文件名并将他们的 cmets 保存到一个文件中。然后我们将文件名和路径添加到该用户的数据库记录中。
团队并不担心这里的安全问题,但我担心。他们的想法是“我们创建文件名,它是基于任何用户输入的 0%,并且由于我们将这个 'UserX cmets' 文件名和数据库路径写入数据库,而没有直接的用户影响 - 没有风险。”
我关心的不是数据库活动——因为他们是对的,因为我们只是创建自己的文件名并将其存储在他们的数据库记录中,所以用户对我们写入他们的数据库记录的内容没有任何作用。
我关心的是文本文件!
所以我请求我们的小团队重写代码以使用安全读取然后将用户在 textarea 中的 cmets 写入文本文件。
我担心的是——因为我们计划实际阅读用户的反馈并打开这些文本文件以便稍后阅读——文本区域中可能有一些不好的东西(除非我们清理它)可能会以某种方式伤害我们。
我坚持我们使用 strip_tags() 但我需要了解我们清理 textarea 输入的方式——我认为 strip_tags() 是这里的方法,但我是 100% 新的清理用户输入。我查看了 htmlspecialchars() 但这只是将某些字符(如 '&' 转换为 & 等等。
在我们将用户输入到 textarea 中的任何文本写入我们的网络服务器上的文件之前,是否有其他方法可以净化/确保其安全?
【问题讨论】:
-
htmlspecialchars还将<和>转换为<和>,这足以防止显示任意html 使用输入。 -
我认为这引出了一个问题:为什么将这些存储在文本文件而不是数据库中?
-
AM -- 好问题 -- 因为这是一个 100% 的新功能,我们不知道它会被使用多少,所以现在我们不添加代码和数据库模块来处理安全性问题等,但如果在推出后它被证明是该网站不经常使用的功能,那么将其存储在数据库中可能会更好。
-
阅读用户提供的数据的“安全性”完全取决于您打算如何阅读它。如果您只是要将文件转储到打印机,那么建议 html 清理完全没用,并且它具有导致打印机着火的嵌入式 PCL 或 EPS。
-
上校。弹片,您将句柄更改为“您的常识”-您是这个精美论坛上的巨魔,我只是标记您让站点管理员查看是否需要防止您在这些帖子中自欺欺人。通过成为一个磨蚀性的大洞来寻求关注是愚蠢的。问问自己这个问题:“我是否像其他优秀且有用的回复一样提供了有价值的反馈?或者我是一个粗暴的、寻求关注的空洞巨魔?”不管你的反省和当之无愧的自我谴责,我已经标记你要求管理员见证一个粗暴的巨魔。
标签: php mysql html textarea sanitize