一段时间以来,我一直在摆弄这个问题,但到目前为止还没有一个令人满意的解决方案。
我们目前正在创建一个新的公共API,小部件将使用该API来获取信息,还将信息回传到系统中(例如联系表单)。由于这些小部件将作为Web组件实现,并且可以在任何页面上实现,因此我们无法控制这些小部件的交付方式。
我现在面临的问题是:如何保护API避免不必要的提交(除了常规表单验证),以便我们可以安静地确定它是来自该表单的提交还是合法的POST。 API?
我担心的是,这种情况下的所有内容都是可欺骗的(例如,获取表单令牌并将其作为标头提交,验证原始标头等),因为它很容易被欺骗,例如使用Postman。对于您的任何经验和向正确方向的提示,我都会感到非常高兴。
答案 0 :(得分:1)
我认为您可以尝试:
您是否实施了类似的措施?也许通过查看您拥有的东西,我们可以看到缺少的东西。
它也很复杂,因为它是公开的,并允许从任何系统访问。评估身份验证系统,并从小部件本身进行身份验证,并结合密钥限制,也许是个好主意。
答案 1 :(得分:0)
如果您具有未经身份验证的公共API,
您所能做的就是让黑客尽可能地难以访问。
换句话说:在门上放更多/复杂的锁... 但是可以捡到任何锁
我们用来使WebComponent保持“安全”的方法,
是从长URI加载WebComponent:
(现代浏览器不再具有2048个字符的URI限制)
https://domain/p1/p2/customeElements/define/secure-api/HTMLElement/p7/p8/webcomponent.js
然后,组件代码解码 URI到
let p = [domain,p1,p2,"customElements","define","secure-api","HTMLElement",p7,p8]
执行JavaScript:
window[p[3]][p[4]](p[5],class extends window[p[6]]{ ...
如果您进行了一些BtoA / AtoB和String.reverse()转换
https://domain/AH=V/CV=/==QYvRnY/aW5uZXJ/IVE1M/webcomponent.js
您吓倒了大多数潜在的黑客
通过生成webcomponent.js
服务器端以使用/domain/
部分,
较长的URI可以成为服务器和客户端之间的(唯一)握手
由于所有状态都在URI中,因此很容易应用地址 shifting 机制,
每个请求都可以是不同的URI(使PostMan无法使用,并且调试起来也很麻烦:-)
[并且我们应用了一些其他的技巧,在这里我不会解释]
这不会将黑客拒之门外,但会延迟足够长的时间,让大多数人放弃。
在我们的代码/ URI编码中,我们还引用了唯一的“ mousetrap ” URI。
如果我们在该子目录中检测到404活动,则表明有人正在主动选择锁。
并且..我们可以交互式地将其引导/定向到更多的捕鼠器。
到目前为止,我们只有一次尝试。
一个电话(因为我们知道买家网域)足以让他们停下来。
[非常知名的] IT公司X的Hello IT经理,
如果,我们检测到您公司IP地址nn.nn.nn.nn的黑客攻击尝试,
根据法律,我们必须将此事报告给当局
HTH