Ruby on rails 清理rails中的输入XSS和HTML输入

Ruby on rails 清理rails中的输入XSS和HTML输入,ruby-on-rails,input,xss,sanitize,Ruby On Rails,Input,Xss,Sanitize,我知道我可以在视图中使用ActionView helperstrip\u tags方法来清理输出,但在将用户输入保存到数据库之前,清理用户输入的最佳方法是什么?我是否应该找到一种方法将视图辅助对象包含在控制器中并重用strip_tags方法?我以为rails会在全球范围内提供类似的功能。为什么需要清理用户的输入 通常,只要在打印用户输入或将其嵌入更大的输出块时,对其进行严格的上下文感知编码/转义即可。插件如何?可能会清理gem:为什么要清理用户输入?这根本没有任何意义!您总是希望清理(转义)输出

我知道我可以在视图中使用ActionView helper
strip\u tags
方法来清理输出,但在将用户输入保存到数据库之前,清理用户输入的最佳方法是什么?我是否应该找到一种方法将视图辅助对象包含在控制器中并重用strip_tags方法?我以为rails会在全球范围内提供类似的功能。

为什么需要清理用户的输入


通常,只要在打印用户输入或将其嵌入更大的输出块时,对其进行严格的上下文感知编码/转义即可。

插件如何?

可能会清理gem:

为什么要清理用户输入?这根本没有任何意义!您总是希望清理(转义)输出,而不是输入,因为清理的含义取决于您在其中使用内容的上下文。在任何上下文中都不存在安全的字符串。您不希望数据库中有一堆损坏的字符串在应用程序今天使用它们的任何场景中都是“安全的”,因为明天,您可能希望对它们做一些不同的事情。如果您的表示层做了正确的事情(根据上下文转义内容),那么无论其中有多少引号、反斜杠或DROP TABLE语句,您都没有问题。

将恶意代码留在数据库中没有任何意义。web应用程序中的多个攻击向量已经很常见,在我看来,这似乎是一件很容易修复的事情。深入防御,你知道吗?Rails 3采取了正确的方法。它会自动将输出到html中的任何内容(包括用户输入的数据)转义到html中,但程序员指出已经是html安全的特定项目除外。Rails 3进行了深度防御,并且以正确和严格的方式进行防御,数据在正确的地点和时间被转义。2年后,两次没有评论的否决票——评论至少会帮助其他用户更清楚地了解情况。注意:在回答这个问题时,我们使用的是Rails 2,但事情并没有现在那么好!在某些情况下,在将用户输入存储到数据库之前对其进行“清理”是有意义的。例如,如果用户输入他的姓“Smith”,那么将html标记存储在数据库中是没有意义的。在本例中,最好在将姓氏保存到数据库之前去掉html标记。最初的问题与注入(XSS和html)有关,在这种情况下,我认为清理工作总是在进行。但是,即使你不知何故得到了垃圾,你的机会是什么,卫生处理将找到垃圾?对于一个算法来说,很难找出哪部分是名称,哪部分不是名称。例如,该符号何时是HTML实体的一部分,何时是“Smith&Wesson”等名称的一部分?很快,你就会得到这样的结果: