You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails:如何安全实现含用户输入与HTML实体的模型方法字符串渲染?

模型层解决用户输入拼接HTML的安全问题

原方法存在XSS漏洞的核心原因:name和profession属于用户可控输入,直接拼接后调用.html_safe会跳过Rails的自动转义机制。若用户输入包含<script>、<img>这类恶意代码,会被浏览器直接解析执行,引发跨站脚本攻击。

要从模型层根源杜绝风险,需先对用户输入做HTML转义,再拼接安全的HTML实体,最后标记内容为安全:

def name_with_html_entities
  "#{ERB::Util.h(name)} &bull; #{ERB::Util.h(profession)}".html_safe
end

关键说明

  • ERB::Util.h是Rails内置的HTML转义工具,会将用户输入中的特殊字符(如<、>、&、"等)转换为对应的HTML实体,确保恶意代码无法被解析执行。
  • 我们手动添加的&bull;是安全的HTML实体,无需转义;最终调用.html_safe是告知Rails,这段拼接后的内容经过安全处理,不需要再自动转义。

修改后,无论视图层是否额外调用sanitize,模型输出的内容都不会存在XSS风险,从源头避免了漏洞发生。

内容的提问来源于stack exchange,提问作者TomDogg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:03:13