在JavaScript中转义字符?

时间:2015-02-05 13:13:28

标签: javascript

我正在创建一个像这样的文件名

var name = $('#top-line').val();
var fname = random+'-'+name+'-something';

这里fname是文件名。我不知道用户可能会在#top-line中输入什么,如何逃避角色以确保安全。 我用$top line = somethin "else"试了一下,事情搞砸了。

从我读过的评论中我明白了

escape("Need tips? Visit W3Schools!") will produce
Need%20tips%3F%20Visit%20W3Schools%21 

我怀疑文件会保存为

Need%20tips%3F%20Visit%20W3Schools%21

如果有人写的话怎么办?     逃避(/需要提示?访问W3Schools!“)

服务器上的

编辑我正在保存

等文件
$name = uniqid('somevalue',true);
$file = 'usermemes/' . $name . '.jpeg';

在用户计算机上,他们拥有用户提供的名称。

2 个答案:

答案 0 :(得分:0)

您希望在服务器上执行此操作。原因如下:即使您的JavaScript被缩小,请记住(理论上)任何人都可以查看和修改您的脚本。您可以编写一个检查错误字符的好例程,确保用户没有做任何事情"注入",并将输入转换为服务器操作系统的良好文件名,但是如果某人真的有动力,他们可以下载您网页的本地副本,编辑脚本,并根据需要向服务器发送尽可能多的恶意请求。

在客户端进行一些基本的转义是合理的(例如encodeUri - 请参阅this answer了解详细信息),但是您想要真正开展工作你的服务器。不要只是接受用户输入,将其放入文件名字符串中,然后保存在服务器上。它可以像一组str_replace调用一样简单,也可以是检查允许字符的正则表达式。您只是想确保在用户无法看到的地方进行此操作。

修改:如果您只是在本地使用用户输入的名称,我会使用encodeURIComponent并删除带有正则表达式的单引号和双引号作为Prabhu建议。 (但为什么不将文件保存在具有唯一名称的服务器上,然后让用户下载?

答案 1 :(得分:0)

发起你的名字"带有空字符串的变量

var name= "";
name="Need tips? Visit W3Schools!";

和javascript将采取"一切"作为一个字符串,无论是逃避还是什么。 甚至

var name= "";
name="\Need tips? Visit W3Schools!\";

var name= "";
name="Need\\ tips? Vis\\it W3\\School\\s!";

唯一的问题是你需要照顾双引号 所以它可以删除。完全是这样的。

var name= "";
var name = $('#top-line').val();
name.replace(/['"]+/g, '');

或写一个逻辑,用来提醒用户不要输入双引号