安全读取查询字符串参数的最佳方法?

Tod*_*ong 3 javascript security parameters

我们有一个项目可以生成一个代码片段,可以用于其他各种项目.代码的目的是从查询字符串中读取两个参数,并将它们分配给iframe的"src"属性.

例如,URL http://oursite/Page.aspx?a = 1&b = 2的页面中将包含JavaScript以读取"a"和"b"参数.然后,JavaScript将根据这些参数设置iframe的"src"属性.例如,"<iframe src ="http://someothersite/Page.aspx?a = 1&b = 2"/>"

我们目前正在使用服务器端代码执行此操作,该代码使用Microsoft的反交叉脚本库来检查参数.但是,新的要求已经表明我们需要使用JavaScript,并且它不能使用任何第三方JavaScript工具(例如jQuery或Prototype).

我知道的一种方法是在使用它们之前替换参数中的"<",单引号和双引号的任何实例,但这对我来说似乎不够安全.

其中一个参数始终是"P",后跟9个整数.另一个参数始终是15个字母数字字符.(感谢Liam建议我说清楚).

有人对我们有什么建议吗?

非常感谢您的宝贵时间.

Mik*_*uel 7

不要使用escape和unescape,请使用decodeURIComponent.例如

function queryParameters(query) {
  var keyValuePairs = query.split(/[&?]/g);
  var params = {};
  for (var i = 0, n = keyValuePairs.length; i < n; ++i) {
    var m = keyValuePairs[i].match(/^([^=]+)(?:=([\s\S]*))?/);
    if (m) {
      var key = decodeURIComponent(m[1]);
      (params[key] || (params[key] = [])).push(decodeURIComponent(m[2]));
    }
  }
  return params;
}
Run Code Online (Sandbox Code Playgroud)

并传入document.location.search.

至于转入<lt<,这不足以确保在不允许脚本运行的情况下将内容安全地注入HTML.确保您逃避以下<,>,&和".

它不能保证参数不被欺骗.如果您需要验证其中一台服务器是否生成了URL,请搜索URL签名.