Should I avoid using http://localhost:3000
as a callback url in Auth0 (particularly in a dev
or stage
environment)?
I understand that there is a potential for attacks using a POST http request utilizing the localhost url. However, is that a consideration I would need to make for a development or stage environment?
答案 0 :(得分:3)
实际上这是一个非常好的问题,尽管实际上最好的答案是(常识)明显的答案。是的,使用<script>
function loginsuccess() {
if (typeof user === "undefined" || user.loggedIn !== true) {
return
}
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if (xhr.readyState == 4 && xhr.status == 200){
var json = JSON.parse(xhr.responseText);
...
}
}
xhr.open("GET","http://myurl.com/api/users/"+user.userId,true);
xhr.send();
}
</script>
是一个坏主意,尽管方便性和实用性的权衡仍然使它成为经常使用的反模式。是的,在解释样本时甚至包括Auth0官方文档,以使事情易于理解......
不幸的是,localhost从许多方面(包括Web浏览器)获得特殊处理,通常最好避免使用它。以下是考虑避免http://localhost
的一些原因:
1)。您的所有流量都是未加密的(http),因此嗅探您的凭据是微不足道的(不是特定于localhost,但如果您有机会介绍https,那么def。值得一提。)
2)。回调localhost是一个简单的冲突点,特别是在启动身份验证和回调的情况下。
3)。由于部署不当或(无意)无知,通常如果在DEV环境中设置了localhost
回调,它们最终会被粘贴到PRD环境中。太
4)。如果您的应用程序在localhost上运行,即使端口不同,本地测试SSO也会失败。
5)。依赖于新localhost
端点(跨源流)的嵌入式登录不能在允许的Web来源字段中具有localhost(通过Management API或Dashboard设置)。请参阅here for more info - 您可以设置本地主机别名,在这种情况下,更新回调网址也是有意义的。
6)。 localhost受到用户代理(包括Web浏览器)的“特殊”关注,这会引起不必要的干扰(广泛声明,但确实如此)。
7)。 Auth0现在支持Custom Domains。如果您设置了自定义域,请说出co/authenticate
然后在本地进行测试,您可以在主机文件中创建别名,例如。 id.mysite.com
- 在这种情况下,在引用所涉及的域的所有设置中使用app1.mysite.com
域是有意义的,包括您的回调值。
所有的说和做,现实是你只是在开发Dev,你必须完成你的工作。一个建议是使用mysite.com
,而不是在本地主机文件中设置127.0.0.1的别名,例如。 localhost
。它不会避免上面列出的所有风险,包括127.0.0.1 app1.mysite.com
的使用,但它会避免一些陷阱。不会试图捍卫其安全利益,除了说它更难以猜测你的白名单允许的回拨网址列表中可能存在的内容。