亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP - 如何檢查請求是否是針對 JS 工作者的

PHP - 如何檢查請求是否是針對 JS 工作者的

慕婉清6462132 2021-11-25 19:34:58
在向 MDN 咨詢了推薦人政策和谷歌搜索、DuckDucking 和 StackOverlow-searching 之后,也許你可以幫助我解決這個相當簡單(但很虛幻)的問題?工藝流程瀏覽器向服務器發出請求根據HTTP_REFERER標頭,服務器決定響應但為什么?(你問)這是一組精心設計的安全檢查的一部分,在這種情況下,決定客戶端是否可以訪問請求的FUBU文件(由我們為我們提供)。如果引用者丟失,這將不起作用,但是當 JavaScript 向指定的工作人員發出請求時 -引用者(請求標頭)確實丟失了。我嘗試過的 - 但失敗了Referrer-Policy: same-origin為每個請求設置設置適當的 CORS 標頭Access-Control-Allow-Headers: x-requested-with- 響應每個請求。題我如何才能確定是否對 JS 工作文件發出了請求,或者只是強制 HTTP 機制表現得像它應該的那樣
查看完整描述

1 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

跳出“盒子”思考

由于“似乎”沒有辦法以“好”的方式做到這一點,因此人們總是可以運用微小的創造力來實現特定的結果。

簡單回顧一下:

  • 要求是有辦法從那里的請求時識別

  • 這可以在每次Worker調用時手動實現,也可以自動實現

  • 任何安全問題似乎都在別處處理

  • Worker在調用時更改URL 可能有助于自動處理

可行的解決方案

這是一個可用于“劫持”某些類調用或方法的包裝器:

const hijack = function(driver,victim,jacker)

{

    if(((typeof driver)=='string')&&!victim){return this.plan[driver]}; // recap

    if(victim in this.plan){return}; // only jack once? .. less cruel

    this.plan[victim]={victim:driver[victim],jacker:jacker}; // plan the heist


    let con = {enumerable:false,configurable:false,writable:false,value:function()

    {

        let car=hijack((this.mask||this.name||this.constructor.name)); let m=this.mask;

        let arg=car.jacker.apply(null,arguments); if(!Array.isArray(arg)){arg=[arg]};

        if(!m){return new (Function.prototype.bind.apply(car.victim,[null].concat(arg)))()}

        else{return car.victim.apply(this,arg)};

    }};


    try{con.value.prototype = Object.create(driver[victim].prototype)} // blend in

    catch(oops){Object.defineProperty(driver,'mask',{value:victim});}; // recover

    Object.defineProperty(driver,victim,con);

}.bind({plan:{}});

... 釘子遇上錘子

這個怎么運作

  • 它接受 3 個參數:

    1. driver ~ 包含目標函數/方法的對象

    2. victim ~ 將被攔截的函數/方法的名稱

    3. jacker ~ 一個回調函數 - 用于中繼/更改參數

  • 原方法復制到可以使用的地方或者后續調用

  • 回調強加(廢棄)原始的,并且可以在調用者和被調用者之間傳遞不變的參數(與原始的完全一樣),但現在你可以控制它是如何發生的(如果有的話)以及準確地傳遞什么;要么有一些簡單的條件,要么有一些精心設計的計劃(又名“邪惡計劃”)

  • 為了簡單起見,這段代碼(上面)只允許每個 1 次攔截victim,但這可以擴展為多次攔截;通過“鏈中繼”(回調數組)或“事件調度程序 + 事件偵聽器組合”。

如何使用

具體問題:

hijack(window,'Worker',function(arg){return `${arg}?worker=true`});

為了解決評論中的安全問題,api-key可能很有用;因此,如果將 somestring傳遞給當前會話(或客戶端)獨有的正在運行的實例(瀏覽器或服務器),則就足夠了,例如:

hijack(window,'Worker',function(arg){return `${arg}?worker=${window.ApiKey}`});

.. whereApiKey被全局定義為 a string,但它也可以是函數調用的結果 - 它從 cookie 中獲取它,或以任何方式獲取。

有用的工具

這也可用于增強安全性。如果您擔心來自devtools或更糟的XHR請求:eval() - 那么您可以使用它來全局攔截這些調用/調用。hijack

例如:

hijack(URL,'createObjectURL',function(arg){console.log(arg); return `whatever`});

如果您打算將其用作安全工具,那么它需要一些帶有“調用堆?;厮荨钡?TLC、一個“突變觀察者”……和一小撮(暗)物質(:

免責聲明
在此練習中沒有人受傷.. 受害者結果還好.. 自行決定使用


查看完整回答
反對 回復 2021-11-25
  • 1 回答
  • 0 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號