这个JavaScript代码安全吗?
Is this JavaScript code safe?
我在网上找到了以下JS。
获取url参数值的函数。
function get_url_param(param) {
param = param.replace(/['[]/,"'''[").replace(/[']]/,"''']");
var regexS = "[''?&]"+param+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec(window.location.href);
if( results == null )
return '';
else
return results[1];
}
然而,当我看到exec()
函数时,我总是想:哇!
所以我的问题是:它安全吗?
附注:如果你认为这个函数很糟糕,有更好的选择,不要犹豫分享:)
上面的函数使用了真实的url,但是我只需要解析一个包含url的字符串
您在函数中看到的.exec()
不是窗口的,而是RegExp
对象的。
所以用。
我不会将Regexp exec
与eval
混淆。有点笨拙,但应该可以工作。
Regexp#exec
是安全的,尽管不是一个很好的接口。
附注:如果你认为这个函数很糟糕,有更好的选择,不要犹豫分享:)
yeeep: -)
param = param.replace(/['[]/,"'''[").replace(/[']]/,"''']");
这没有使用g
全局regexp,所以你只替换每个括号的一个实例;field[][]
行不通。你也不需要角色组…param.replace(/'[/g, '''[')
就可以了。或者,非regexp替换成语param.split('[').join('''[')
.
:
var regexS = "[''?&]"+param+"=([^&#]*)";
您没有转义足够多的字符,无法将它们放入regexp中并使它们表示其字面意思。
无论如何,这种regex黑客仍然不是解析url/查询字符串的好方法。这不能正确处理;
或%
编码,或+
的空间,它可能会在URL的其他地方的参数相似。
相反,让我们首先单独获取查询字符串。如果您有一个链接或位置对象,您可以从.search
属性中获得它。如果你只有一个字符串URL,你可以把它变成一个链接对象,以获得可靠的:
function getQueryString(url) {
var a= document.createElement('a');
a.href= url;
return a.search;
}
现在你可以通过删除前面的?
,拆分&
或;
,然后将url解码的结果放入JS对象来解析它:
function parseQuery(query) {
var lookup= {};
var params= query.slice(1).split(/[&;]/);
for (var i= 0; i<params.length; i++) {
var ix= params[i].indexOf('=');
if (ix!==-1) {
var name= decodeURIComponent(params[i].slice(0, ix));
var value= decodeURIComponent(params[i].slice(ix+1));
if (!(name in lookup))
lookup[name]= [];
lookup[name].push(value);
}
}
return lookup;
}
这使得查找参数变得容易:
var url= 'http://www.example.com/?a=b&c=d&c=%65;f[]=g#h=i';
var pars= parseQuery(getQueryString(url));
alert(pars.a); // ['b']
alert(pars.c); // ['d', 'e']
alert(pars['f[]']); // ['g']
alert('h' in pars); // false
如果您不需要为一个参数读取多个值,您可以只执行lookup[name]= value
而不是if...[]...push
舞蹈,在查找中返回单个字符串值而不是列表。
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 是否存在React Native“;WEB代码安全防护”;
- 如何在Google chrome安全首选项文件中创建扩展安全哈希代码
- 电子邮件保护程序:这个代码今天还安全吗
- 是否可以向用户发送javascript代码's浏览器安全
- 将敏感信息保存在javascript代码中的安全缺陷
- 从 postMessage 事件接收的 eval() 代码有多安全
- 在服务器发送的 JavaScript 代码上安全使用 eval()
- 关于这个Caja(安全JavaScript)代码的说明
- 将所有代码放在“$(document).ready”中是否安全
- 当代码可用时,Javascript中的eval真的有安全风险吗
- Sharepoint 2010-停止不安全的代码删除
- 将javascript代码作为POST请求发送的安全方式是什么
- 用符合内容安全策略的代码替换多个内联按钮onclick事件处理程序
- 使用<脚本src=..查找站点的状态代码-安全问题
- 在向交付的代码添加新代码时使用“尝试捕获”是否会产生安全裕度
- 对于不受信任的代码,工作人员是否足够安全
- 安全的Javascript代码在现代浏览器中可能吗
- Web应用程序安全:JavaScript代码和数据的替换
- 流星:条带不正确的安全代码不会抛出客户端错误