我正在创建一个像这样的文件名
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';
在用户计算机上,他们拥有用户提供的名称。
答案 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, '');
或写一个逻辑,用来提醒用户不要输入双引号