在我们的Rails应用程序3.2.13,我们有我们的看法ERB一个验证码:字符串被不当逃脱时放入文本字段
<script language="javascript">
function copy_address()
{
document.getElementById("account_firm_name").value = '<%= escape_javascript firm_name %>';
document.getElementById("account_address_line_1").value = '<%= escape_javascript address %>';
document.getElementById("account_city").value = '<%= escape_javascript city %>';
document.getElementById("account_state_id").value = '<%= escape_javascript state_id.to_s %>';
document.getElementById("account_zip_code").value = '<%= escape_javascript zip %>';
}
</script>
<%# snip %>
<%= form_tag %>
<table>
<tr class="two_columns">
<td><label for="firm_name">Firm Name*</label></td>
<td><%= text_field 'account', 'firm_name' %></td>
</tr>
<%# snip %>
</table>
</form>
这是一个Rails的形式和JS功能拷贝一些已知值转化为形式。
如果有在firm_name
,address
,city
,或zip
字符串任何特殊字符由ERB注入,它们过于HTML逃脱。例如,如果firm_name = '&'
,然后将所生成的HTML代码中包含JS功能:
<script language="javascript">
function copy_address()
{
document.getElementById("account_firm_name").value = '&';
// snip
以及执行所述功能插入字符串&
(未&
)插入在形成相应的文本字段。
有没有一种安全的方法来阻止ERB转义字符串的值或使用JavaScript在将字符串放入文本字段之前解除字符串的逃脱方式?
(到目前为止,我已经使用.html_safe
和raw
Rails的方法试过,但没有骰子。)
如何打印出一个JSON编码的对象,然后在JavaScript中使用它? – elclanrs
你可以在控制器中使用'sanitize',那么你不必在视图中使用'escape_javascript' –
@n_i_c_k:我最近添加了'escape_javascript'试图让它工作。没有这些调用的行为是相同的。 – Kevin