1

所以一直阻止我发布我想要的标题,所以终于得到了一个让我发布的标题,尽管它有点糟糕,所以随意编辑/更改它。

我有用户可以填写的字段以及我们拥有的 javascript

'${chart.title}' 

和类似的东西。仅仅去掉单引号字符就足够了,这样他们就无法将其转义回 javascript?还是有其他方法可以关闭以单引号字符开头的字符串。

${chart.title} 插入用户在前一页输入的标题,因此他们很自然地可以输入诸如“Title'+callMethod()+'RestOfTitle”之类的内容,将 callMethod 注入我的 javascript。

谢谢,院长

4

2 回答 2

1

最好的方法是将输入限制为字母数字和空格字符。

如果您想允许标题内的任何内容,您可以使用转义功能。 http://xkr.us/articles/javascript/encode-compare/

仅仅剥离单引号字符的字符串绝对是不够的。出于一个原因考虑新线路。

于 2013-05-15T21:25:39.310 回答
1

有几个选项。

首先采用非常严格的方式,对标题的输入字段进行所谓 的白名单验证,并始终对输出到页面的文本进行编码。这将过滤掉所有不需要的(和潜在危险的)字符,并确保如果其中一些通过过滤器(或有人在应用过滤器后更新文本以包含一些 js 代码),编码过程会使所有恶意 js 脚本无法运行(它把它变成纯文本)。

其次,您确实让您的用户输入他们想要的任何内容(这是非常不推荐的方式,但有时开发人员要求这样做),但始终对您输出到页面的文本进行编码。

您可以使用正则表达式自行实现白名单验证,也可以使用其中一个库。

于 2013-05-15T22:35:33.690 回答