PHP - 如何检查请求是否是针对 JS 工作者的

在向 MDN 咨询了推荐人政策和谷歌搜索、DuckDucking 和 StackOverlow-searching 之后,也许你可以帮助我解决这个相当简单(但很虚幻)的问题?

工艺流程

  1. 浏览器向服务器发出请求

  2. 根据HTTP_REFERER标头,服务器决定响应

但为什么?(你问)

这是一组精心设计的安全检查的一部分,在这种情况下,决定客户端是否可以访问请求的FUBU文件(由我们为我们提供)。

如果引用者丢失,这将不起作用,但是当 JavaScript 向指定的工作人员发出请求时 -引用者(请求标头)确实丢失了。

我尝试过的 - 但失败了

  • Referrer-Policy: same-origin为每个请求设置

  • 设置适当的 CORS 标头Access-Control-Allow-Headers: x-requested-with- 响应每个请求。

我如何才能确定是否对 JS 工作文件发出了请求,或者只是强制 HTTP 机制表现得像它应该的那样


慕婉清6462132
浏览 174回答 1
1回答

幕布斯7119047

跳出“盒子”思考由于“似乎”没有办法以“好”的方式做到这一点,因此人们总是可以运用微小的创造力来实现特定的结果。简单回顾一下:该要求是有办法从那里的请求时识别这可以在每次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 个参数:driver ~ 包含目标函数/方法的对象victim ~ 将被拦截的函数/方法的名称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、一个“突变观察者”……和一小撮(暗)物质(:免责声明在此练习中没有人受伤.. 受害者结果还好.. 自行决定使用
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript