Rails:如何在浏览器中显示动态html内容,而不会对其进行转义,也不会引起XSS攻击
Rails: How to show dynamic html content in the browser without escaping it and without causing XSS attack
我想在浏览器中diplay html内容,而不必转义它。我的代码如下。
<% @mydata = "<p>paragraph</p><h1>Test</h1><script>alert('got your cookie')</script><h1>another test</h1>" %>
<%= sanitize @mydata %>
这里我不能使用raw方法,因为raw
方法会执行恶意的javascript代码,因此我使用rails sanitize
方法。但问题是rails消毒方法删除了CCD_ 3行,而没有在浏览器中显示它。
我得到的输出如下
段落
测试
另一个测试
我的预期输出如下
段落
测试
警报("获取cookie")另一个测试
有没有任何方法可以从用户输入中取消对html内容的捕获并仅转义javascript内容?
谢谢,
在rails中,您可以将标签列入白名单:
<%= sanitize @comment.body, tags: %w(strong em a), attributes: %w(href) %>
- http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html
其他方法:
选项1
require 'cgi'
CGI.escapeHTML('<h1>hi</h1><script>aeuoau</script>')
# => "<h1>hi</h1><script>aeuoau</script>"
- http://ruby-doc.org/stdlib-2.2.0/libdoc/cgi/rdoc/CGI.html
选项2
如果你正在构建一个类似博客网站的东西,在那里你会显示html代码:
- http://coderay.rubychan.de/
- https://github.com/rubychan/codera
选项3
如果您只想删除恶意HTML并保留常见的文本标记,如p
、b
、ul
。。。。
raw(simple_format('<h1>hi</h1><script>aeuoau</script>'))
# => "<p><h1>hi</h1>aeuoau</p>"
http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
注意:simple_format将"格式化"您的代码=>将'n
包装在<p></p>
中,等等
其他宝石
- https://github.com/rgrove/sanitize
- https://github.com/flavorjones/loofah
相关文章:
- 在JavaScript中输出转义字符
- 转义符不能与innerHTML一起使用
- Rails 3.2 js.erb文件转义js
- 转义在jsp's脚本
- 使用Jinja2的JavaScript转义字符串
- 将c#视图模型转换为javascript模型时转义HTML标记
- 如何照顾CSRF&单页应用程序中不使用cookie的XSS攻击
- Rails:如何在浏览器中显示动态html内容,而不会对其进行转义,也不会引起XSS攻击
- 删除单引号字符转义
- 如何使用javascript/jquery更改转义键的功能
- 包含转义符号的正则表达式
- 在RegEx(JavaScript)中正确转义变量
- 在Javascript中实现对哈希值的暴力攻击
- Javascript-正则表达式,用于在未转义字符上拆分字符串,例如|,但忽略|
- 如何转义字符串中的html实体
- Regex以转义HTML标记
- XSS脚本攻击攻击->可以't调用javascript
- Javascript-转义特定字符
- 在使用URL哈希的XSS攻击中重新定义转义函数
- 正在转义<和比;足以阻止XSS攻击