如何在Rails的api模式下防止XSS攻击



我读过一篇关于防止XSS攻击的文章。它解释说,Rails本身可以防止一些攻击。实际上Rails使用ERB::Util#html_escape函数来转义html实体

<b>Hello <%= params[:name] %></b>
如果以上内容受到?name=<script>alert(1)</script>的攻击,输出如下:
<b> Hello &lt;script&gt;alert(1)&lt;/script&gt;gt; </b>

但是,当我在API模式下传递此name时,它不起作用

POSTMAN
url?name=<script>alert(1)</script>

Rails应用程序
params[:name]
输出将为"<script>alert(1)</script>"

它是否有在API模式下正常工作的配置?

接收这样的数据不是攻击。显示它是一种攻击。

默认情况下,Rails在HTML上下文中进行转义,并且仅在HTML上下文内进行转义,因此当您这样做时:

<p><%= params[:name] %></p>

您将看到被渲染为无害的转义版本。唯一的解决办法是,如果你特意用html_safe声明它是安全的,除非你确信它是安全,否则你不会这么做。

如果你有一个完全没有前端的API风格的应用程序,恭喜你,你不会受到XSS攻击。然而,你的客户需要采取预防措施,确保他们在适当的背景下正确地避开任何内容。

换句话说,除非显示HTML,否则Rails不会也不应该在意。

请记住,参数本身从未被更改,只是在显示之前进行了转义。

最新更新