Rails的api模式如何防止XSS攻击?
How to prevent XSS attacks in api mode of Rails?
我看过一篇关于防止 XSS 攻击的文章。它解释说,Rails 本身可以防止某些攻击。实际上 Rails 使用 ERB::Util#html_escape 函数来转义 HTML 个实体。
<b>Hello <%= params[:name] %></b>
如果用?name=<script>alert(1)</script>
对上面进行攻击,输出结果如下:
<b> Hello <script>alert(1)</script>gt; </b>
但是,当我在 API 模式下传递这个 name
时,它不起作用。
邮递员
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 攻击。但是,您的客户需要采取预防措施,以确保他们在适当的上下文中正确转义任何内容。
换句话说,Rails 不会也不应该关心,除非正在显示 HTML。
记住,参数本身永远不会改变,它只是在显示之前转义。
我看过一篇关于防止 XSS 攻击的文章。它解释说,Rails 本身可以防止某些攻击。实际上 Rails 使用 ERB::Util#html_escape 函数来转义 HTML 个实体。
<b>Hello <%= params[:name] %></b>
如果用?name=<script>alert(1)</script>
对上面进行攻击,输出结果如下:
<b> Hello <script>alert(1)</script>gt; </b>
但是,当我在 API 模式下传递这个 name
时,它不起作用。
邮递员
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 攻击。但是,您的客户需要采取预防措施,以确保他们在适当的上下文中正确转义任何内容。
换句话说,Rails 不会也不应该关心,除非正在显示 HTML。
记住,参数本身永远不会改变,它只是在显示之前转义。