ruby-on-rails – 处理用户输入的代码 – 安全性
我的应用程序允许用户输入任何语言的代码(
python,c,java,ruby等),我使用
PrismJS作为语法高亮显示器. rails是否处理xss和inject,还是需要进一步清理/验证代码?
安全处理用户输入代码(如stackoverflow)的正确方法是什么? 表格输入 <div class="form-group"> <label>Code Snippet</label> <%= f.text_area :body,class: "end-field form-control",placeholder: "",rows: 8 %> </div> 视图 <pre><code class="language-<%= snippet.language %> line-numbers"><%= snippet.body %></code></pre> 目前没有进行任何卫生或验证. 输出: 解决方法
OWASP (XXS prevention cheat sheet,Rule #1)建议您使用以下替换来清理两个标记之间的代码:
& --> & < --> < > --> > " --> " ' --> ' ' not recommended because its not in the HTML spec (See: section 24.4.1) ' is in the XML and XHTML specs. / --> / forward slash is included as it helps end an HTML entity 这是他们所说的:
我的样本实施(不是确定安全) def sanitize_inside_tags(text) {"&"=>"amp","<"=>"lt",">"=>"gt","""=>"quot","'"=>"#x27","/"=>"#x2F"}.each do |char,replacement| text = text.gsub(char,"&#{replacement};") end return text end Rails Sanitize方法 这可能是您的最佳选择,因为它不仅是一个使用良好且经过测试的卫生库,而且还允许一些标签,例如< b>和朋友,以便您的用户可以安全地使用一些HTML标记. 在回答您的问题时,您可以安全地使用导轨卫生库,这可能是您的最佳选择. 如果你想剥离所有标签或允许更少,你可以查看custimization here. 语法Hilighting 正如@ImranAli在他的评论中所建议的那样,请查看this post并尝试查看列出的所有库. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |