我正在实现一个Rails应用程序,用户可以在其中存储代码片段供以后参考。我打算使用Markdown进行文本输入,可能会使用wmd markdown editor。 (Stackoverflow使用的那个。)
我有点担心人们在编辑框中输入代码的想法。根据我的理解,存在进入SQL的危险,这可能会搞砸我的数据库,或者输入稍后会运行的JavaScript并做恶作剧。
通常情况下,Rails具有防范此功能的功能,但我是否处于特殊情况,因为我的用户会被鼓励输入代码片段?
我应该注意哪些额外的预防措施?
答案 0 :(得分:5)
只需清理您的数据库条目,您就可以了。 Rails现在默认执行此操作。你只需要正确使用框架。请查看此信息以获取更多信息:http://wiki.rubyonrails.org/howtos/security/sql_injection
DO THIS:
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应用程序中找到 允许代码注入 恶意网络用户进入网页 其他用户查看。示例 这样的代码包括客户端脚本。 一个被利用的跨站点脚本 漏洞可以被攻击者使用 绕过访问控制,如 同源政策。漏洞 这种被利用来制作 强大的网络钓鱼攻击和浏览器 战功。进行跨站点脚本编写 在网站上约占80% 所有文件证据 截至2007年的漏洞。经常 在一次袭击中“一切都看起来 对可能的最终用户来说很好 受到未经授权的访问,被盗 敏感数据和财务数据 失利。 (via wikipedia)
当然
SQL注入是代码注入 利用安全性的技术 漏洞发生在 应用程序的数据库层。该 用户存在漏洞 输入被错误地过滤 用于字符串文字转义字符 嵌入在SQL语句或用户中 输入不是强类型的 从而意外地执行。它是 一个更一般的类的实例 可能发生的漏洞 无论何时编程或编写脚本 语言嵌入另一个语言。 SQL注入攻击也是已知的 作为SQL插入攻击。1 (via wikipedia)
答案 1 :(得分:3)
您不会处于特殊情况,因为我们鼓励用户输入代码段。人们可以在不鼓励他们的字段中输入代码片段。基本上,你应该总是“格外小心”。不要相信用户输入。
答案 2 :(得分:2)
您实际上在接受代码 samples 方面处于更安全的位置,而不是允许实际的代码。我的意思是,例如, Stack Overflow让我输入实际的HTML来控制我的帖子。
允许实际代码太多更危险,因为您将评估该代码。在Stack Overflow示例中,该站点实际上正在评估像<a href="http://example.com/">link</a>
这样的输入标记 - 这意味着它需要在寻找onclick处理程序等等。彻底的清理比简单地转义要困难得多。
因此,只要您不评估任何内容,您就可以与接受文本输入的任何其他网站在同一条船上。坚持标准数据输入原则 - 例如
。在任何地方写入之前立即转义任何和所有输入 - 你会没事的。