Rails:如何安全实现含用户输入与HTML实体的模型方法字符串渲染?
模型层解决用户输入拼接HTML的安全问题
原方法存在XSS漏洞的核心原因:name和profession属于用户可控输入,直接拼接后调用.html_safe会跳过Rails的自动转义机制。若用户输入包含<script>、<img>这类恶意代码,会被浏览器直接解析执行,引发跨站脚本攻击。
要从模型层根源杜绝风险,需先对用户输入做HTML转义,再拼接安全的HTML实体,最后标记内容为安全:
def name_with_html_entities "#{ERB::Util.h(name)} • #{ERB::Util.h(profession)}".html_safe end
关键说明
ERB::Util.h是Rails内置的HTML转义工具,会将用户输入中的特殊字符(如<、>、&、"等)转换为对应的HTML实体,确保恶意代码无法被解析执行。- 我们手动添加的
•是安全的HTML实体,无需转义;最终调用.html_safe是告知Rails,这段拼接后的内容经过安全处理,不需要再自动转义。
修改后,无论视图层是否额外调用sanitize,模型输出的内容都不会存在XSS风险,从源头避免了漏洞发生。
内容的提问来源于stack exchange,提问作者TomDogg
相关产品推荐
相关产品推荐

