Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向iframe添加新标题_Javascript_Php_Iframe_Google Chrome Extension - Fatal编程技术网

Javascript 向iframe添加新标题

Javascript 向iframe添加新标题,javascript,php,iframe,google-chrome-extension,Javascript,Php,Iframe,Google Chrome Extension,如何仅为受信任的请求为每个传出请求添加新头 chrome.webRequest.onBeforeSendHeaders.addListener(function(details){ var headers = details.requestHeaders; console.log("=========BEFORE=========="); console.log(headers); headers.push({ name: "CSRF",

如何仅为受信任的请求为每个传出请求添加新头

    chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
    var headers = details.requestHeaders;
    console.log("=========BEFORE==========");
    console.log(headers);
    headers.push({
      name: "CSRF",
      value: "CSRFTOKEN"
    });
    console.log("=========AFTER==========");
    console.log(headers);


    },
    {urls: [ "*://*.example.com/*" ]},['requestHeaders']);
甚至还将此标题添加到iframe中

var attr ={"src":"http://example.com/test.php"};
var s = zen.utils.createElement(document,"iframe",attr);
document.body.appendChild(s);
这是一个示例test.php文件,它打印所有的头文件

<?php
 $header=array_merge(getallheaders(),apache_response_headers());
print_r($header);
阅读。重点地雷:

如果可选的
opt_extraInfoSpec
数组包含字符串
'blocking'
(仅允许特定事件),则回调函数将同步处理。这意味着在回调函数返回之前,请求将被阻止

在这种情况下,回调可以返回一个,确定请求的下一个生命周期。根据上下文,此响应允许取消或重定向请求(
onBeforeRequest
),取消请求或修改头(
onBeforeSendHeaders
onHeadersReceived
),或提供身份验证凭据(
onAuthRequired

因此,要修改标题,您需要:

  • 声明要修改请求;这必须阻止请求,直到您做出反应。您需要向API调用添加
    “阻塞”

  • 对于这样的操作,您需要一个特殊的权限,
    “webRequestBlocking”
    。将其添加到清单中

  • 您需要从回调返回修改过的头

    chrome.webRequest.onBeforeSendHeaders.addListener(
      function(details){
        var headers = details.requestHeaders;
        /* ..modify headers.. */
        return { requestHeaders : headers };
      },
      { urls: [ "*://*.example.com/*" ] },
      [ 'blocking', 'requestHeaders' ]
    );
    

  • 仅供参考,有代码总是将CSRF令牌添加到URL区域的请求中,这是一个很好的解决安全问题的方法,并且几乎使CSRF毫无意义。@abraham有任何可能的威胁吗?是的。现在我不能说是否真的存在漏洞,但安全性是关于分层的,每次删除一层,攻击成功的可能性都会增加。