1

我正在实现一个 Rails 应用程序,用户可以在其中存储代码片段以供以后参考。我打算使用 Markdown 进行文本输入,并且可能会使用wmd markdown editor。(正是 Stackoverflow 使用的。)

我有点担心人们在编辑框中输入代码的想法。据我了解,输入 SQL 可能会破坏我的数据库,或者输入稍后会运行并造成恶作剧的 JavaScript 存在危险。

通常,Rails 具有防止这种情况发生的功能,但我在这里是否处于特殊情况,因为我的用户会被鼓励输入代码片段?

我应该注意哪些额外的预防措施?

4

3 回答 3

5

只需清理您的数据库条目,您就可以了。Rails 现在默认情况下会这样做。你只需要正确使用框架。查看更多信息:http ://wiki.rubyonrails.org/howtos/security/sql_injection

做这个:

Project.find(:all, :conditions => ["name = ?", params[:name]])
# or
Project.find(:all, :conditions => {:name => params[:name]})

不是这个:

Project.find(:all, :conditions => "name = '#{params[:name]}'")

您还必须通过以下方式防止 XSS 攻击

<%=h possible_harmful_text %>

以供参考:

跨站脚本 (XSS) 是一种通常在 Web 应用程序中发现的计算机安全漏洞,它允许恶意 Web 用户将代码注入到其他用户查看的网页中。此类代码的示例包括客户端脚本。攻击者可以利用被利用的跨站脚本漏洞绕过同源策略等访问控制。此类漏洞已被用来制造强大的网络钓鱼攻击和浏览器漏洞。截至 2007 年,在网站上执行的跨站点脚本大约占所有记录的安全漏洞的 80%。通常在攻击期间,对于可能遭受未经授权访问、敏感数据盗窃和财务损失的最终用户来说,“一切看起来都很好”损失。(通过维基百科

而且当然

SQL 注入是一种代码注入技术,它利用应用程序数据库层中出现的安全漏洞。当用户输入被错误地过滤为嵌入在 SQL 语句中的字符串文字转义字符或用户输入不是强类型并因此意外执行时,就会出现此漏洞。它是一类更普遍的漏洞的一个实例,只要将一种编程或脚本语言嵌入到另一种中,就会发生这种漏洞。SQL 注入攻击也称为 SQL 插入攻击。1通过维基百科

于 2009-07-03T22:30:23.717 回答
3

您并不处于特殊情况,因为会鼓励用户输入代码片段。人们可以在不鼓励他们输入的字段中输入代码片段。基本上,您应该始终“格外小心”。不要相信用户输入。

于 2009-07-04T18:51:22.590 回答
2

实际上,您在接受代码示例而不是允许实际代码方面处于更安全的位置。我的意思是,例如 Stack Overflow 允许我输入实际的 HTML 来控制我的帖子。

允许实际代码要危险得多,因为您将评估该代码。在 Stack Overflow 示例中,该站点实际上正在评估输入标记,例如<a href="http://example.com/">link</a>- 这意味着它需要注意 onclick 处理程序等。彻底清理比简单地转义要困难得多。

因此,只要您不评估任何内容,您就与任何其他接受文本输入的站点处于同一条船上。坚持标准的数据输入原则——例如,在任何地方写入之前立即转义任何和所有输入——你会没事的。

于 2009-07-05T05:11:45.957 回答