JavaScript中的转义字符?
我正在创建一个这样的文件名JavaScript中的转义字符?,javascript,Javascript,我正在创建一个这样的文件名 var name = $('#top-line').val(); var fname = random+'-'+name+'-something'; 这里fname是文件名。我不知道用户可能会在顶行输入什么,我如何才能避开字符以确保安全。 我试着用一个$top行=其他东西,结果把事情搞砸了 从我读到的评论中,我明白了这一点 escape("Need tips? Visit W3Schools!") will produce Need%20tips%3F%20Visi
var name = $('#top-line').val();
var fname = random+'-'+name+'-something';
这里fname是文件名。我不知道用户可能会在顶行输入什么,我如何才能避开字符以确保安全。
我试着用一个$top行=其他东西,结果把事情搞砸了
从我读到的评论中,我明白了这一点
escape("Need tips? Visit W3Schools!") will produce
Need%20tips%3F%20Visit%20W3Schools%21
我怀疑这个文件是否会被保存为
Need%20tips%3F%20Visit%20W3Schools%21
如果有人写信呢
逃避/需要提示?参观学校
在服务器上编辑我保存的文件如下
$name = uniqid('somevalue',true);
$file = 'usermemes/' . $name . '.jpeg';
在用户计算机上,它们具有用户提供的名称。您希望在服务器上执行此操作。原因如下:即使您的JavaScript被缩小了,也要记住理论上任何人都可以查看和修改您的脚本。你可以编写一个很好的例程来检查坏字符,确保用户没有做任何注入操作,并将输入转换为服务器操作系统的好文件名,但是如果有人真的有动机,他们可以下载你页面的本地副本,编辑脚本,并向服务器发送任意数量的恶意请求
在客户端执行一些基本的转义是合理的,如-请参阅以了解详细信息,但您需要在服务器上执行真正的工作。不要只接受用户输入,将其放入文件名字符串,然后保存到服务器上。它可以像一组str_replace调用或检查允许字符的正则表达式一样简单。你只想确保你在用户看不见的地方做
编辑:如果您只是在本地使用用户输入的名称,我会使用encodeURIComponent,并按照Prabhu的建议删除正则表达式的单引号和双引号。但是,为什么不使用唯一的名称将文件保存在服务器上,然后让用户下载该文件呢?使用空字符串初始化名称变量
var name= "";
name="Need tips? Visit W3Schools!";
javascript将把所有内容都当作一个字符串,不管它是转义还是什么。
甚至
或
唯一的问题是你需要注意双引号
所以它可以被移除。完全像这样
var name= "";
var name = $('#top-line').val();
name.replace(/['"]+/g, '');
或者使用此命令编写一个逻辑,提醒用户不要输入双引号您将根据用户输入在服务器上实际创建文件的可能重复项?您需要在服务器上执行此类操作,以便恶意用户不会破坏您的服务器。不清楚您需要什么-您是否以查询字符串的形式将此字符串发送到服务器?是否使用此名称在服务器上保存文件?是否将其插入数据库查询?请看,但@atmd是对的-您可能希望在服务器上执行此操作。是的,我正在服务器上保存文件的一个副本,用户可以下载另一个副本。我没有在服务器上使用用户名保存文件。用户提供的文件名用于在其设备上保存文件。我对我的问题进行了编辑,以包含更多细节。请再看一下重新定义的问题。更新了我的答案。希望有帮助。我不想为用户添加额外的步骤。我尝试了var name=$'top-line'.val;name.replace/[']+/g;但当我输入某些内容时,文件仍然保存,没有扩展名else@Asain您需要使用replace like name=name.replace/[']+/g的返回值;谢谢@fgb,我真是个笨蛋。我还有一个疑问。如果我使用var name=;变量名称=$'top-line'.val;name=name.replace/[']+/g;var fname=random+'-'+name+'-something';它能解决每个字符的问题吗?将name.replace/[']+/g;替换所有有问题的双引号?是的。。但您甚至无法获得用户也需要的双引号。。简单无双引号。。我认为所有平台在命名文件时都不支持双引号。
var name= "";
name="Need\\ tips? Vis\\it W3\\School\\s!";
var name= "";
var name = $('#top-line').val();
name.replace(/['"]+/g, '');