我目前正在使用 esp8266 构建 wifi 控制的 rgb led 条纹。我想通过网站控制 mcu,所以我的想法是设置一个服务器来托管网站并让 Arduino 定期查询服务器以获取更新(它比这更复杂,但这与这篇文章无关)。
但这就是我的问题所在:Infinityfree(我网站的主机)像大多数其他托管服务提供商一样使用一个简单的反机器人模块(testcookie-nginx-module)来检查客户端是否可以执行 javascript 作为反机器人措施. 客户第一次连接到 infinityfree 网站时,他们会收到以下脚本:
<html>
<body>
<script type="text/javascript" src="/aes.js"></script>
<script>
function toNumbers(d){
var e=[];
d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});
return e
}
function toHex(){
for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)
e+=(16>d[f]?"0":"")+d[f].toString(16);
return e.toLowerCase()
}
var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("8382e1a09e24573ac071261dccc8393c");
document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://thefreshsite.great-site.net/htm/theFreshSite.php?i=1";
</script>
<noscript>
This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support
</noscript>
</body>
</html>
此脚本生成一个字符串并将其作为 cookie 保存在客户端浏览器中。下次客户端连接到网站时,该字符串会作为 http 标头传递给服务器,以便服务器识别客户端并响应网站。然而,由于微控制器不能执行 javascript,它唯一收到的是必须启用 javascript 才能工作的信息。
我做了一些研究,很多其他人也有同样的问题。该问题的常见解决方案是事先在浏览器中生成 cookie,因为 cookie 是静态的(标题键:“Cookie”,标题值:“__test=[THE_CONTENT_OF_YOUR_COOKIE]; expires=Thu, 31-Dec-37 23:格林威治标准时间 55:55; path=/") 您可以将其作为您的 http 请求的标头发送以绕过模块。我使用邮递员测试了此解决方案,但它不起作用。我要么弄乱了标头值,要么错误地使用了邮递员(以前从未使用过它)。
我的饼干:__test=cf2bd8c5785c8e65a8ebd1b58eb666f7; expires=周四,31-Dec-37 23:55:55 GMT;路径=/
邮递员截图:
我的消息来源:
-https://blog.kwiatkowski.fr/?q=en/testcookie
如果我遗漏了一些明显的东西,我很抱歉,我以前从未在网站上工作过,我仍然需要学习这个项目所需的很多东西。