заголовки тегов html <script> - PullRequest
3 голосов
/ 04 апреля 2019

Я пытаюсь потребовать сценарий, защищенный системой аутентификации заголовка, и пытаюсь найти способ обойти это.

Пока совершенно очевидно, что вы не можете добавить собственные заголовки в тег самого скрипта, но я видел кое-что о настройке заголовков на странице перед запросом или на стороне сервера.

До этого момента я не могу сказать, что видел какие-либо твердые ответы.

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Вы можете загрузить его через xhr и eval() на странице.Например, в jQuery вы можете использовать: http://api.jquery.com/jquery.ajax/ - см. beforeSend для установки заголовков;используйте это для извлечения содержимого файла.

Затем используйте https://api.jquery.com/jquery.globaleval/ globalEval() для оценки полученного содержимого на странице.

Вы можете добиться того же с vanilla HttpRequestи eval(), но мне всегда было лень так поступать.А может, нет ... Я только что нашел фрагмент кода в проекте, над которым я работаю:

var evalScript = function(e) {
  var h = evalScript.node,
      s = document.createElement("script");
  s.type = "text/javascript";
  s.text = e;
  h.appendChild(s);
  h.removeChild(s);
};
evalScript.node = document.getElementsByTagName("head")[0] || document.getElementsByTagName("*")[0];
// TODO: make async
function loadJs(js) {
  var req = new XMLHttpRequest();
  req.open("GET", js, false);
  req.send(null);
  evalScript(req.responseText);
}

Просто добавьте к нему заголовки.

0 голосов
/ 04 апреля 2019

Вот простая функция Ajax, которую вы можете использовать для получения содержимого скрипта:

function get(url, callback) {
  var request = new XMLHttpRequest();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if(this.readyState === 4) {
      if(this.status >= 200 && this.status < 400) {
        callback.apply(this, [this.responseText, this]);
      } else {
        // something went wrong.
      }
    }
  };
  request.send();
}

Поскольку вам нужно установить пользовательские заголовки, вы также должны использовать метод request.setRequestHeader, например:

function get(url, callback) {
  var request = new XMLHttpRequest();
  request.open("GET", url, true);
  // BEGIN: CUSTOM HEADERS
  request.setRequestHeader("Header-Name", "header/value");
  request.setRequestHeader("Other-Header", "other/value");
  // END: CUSTOM HEADERS
  request.onreadystatechange = function() {
    if(this.readyState === 4) {
      if(this.status >= 200 && this.status < 400) {
        callback.apply(this, [this.responseText, this]);
      } else {
        // something went wrong.
      }
    }
  };
  request.send();
}

И, наконец, вы бы использовали эту функцию следующим образом:

get("url/to/your/script", function(response) {
  // perform checks...
  window.eval(response);
});

ВНИМАНИЕ: будь очень, ОЧЕНЬ осторожнее при использовании eval, никогда не eval то, чему ты не доверяешь и не помнишь eval может быть злом.

...