在 URL 中使用电子邮件地址安全吗? 我的意思是,假设一个网络应用程序有一个注册用户“Bob”,并且 Bob 已使用他的电子邮件注册=>
[email protected]
。现在您的意见是什么,应用程序接受和处理 //application.com/[email protected]
上的 GET 请求以及每个用户的相同类型的 URL 是否安全?
基本上这取决于你喜欢还是讨厌你的用户。当您按照您的建议操作时,这些 URL 将在网络上的 HTML 页面上传播。不一定局限于您自己的网站,因为人们可能会链接到它。
当您的页面获得足够的吸引力而变得重要时,垃圾邮件机器人的爬虫作者会注意到并向其爬虫添加规则以从 URL 中提取电子邮件地址。这甚至可能没有必要,因为一些愚蠢的正则表达式可能已经在没有适应的情况下找到了电子邮件。
然后,您的用户的电子邮件地址将进入垃圾邮件发送者的列表,并获得“不需要的广告”(委婉地说)。 (这些电子邮件列表也将具有相当高的价值,因为它们被“验证”为真实的现有列表。)
您在这里所做的就是泄露用户信任您的私人身份识别信息。永远不要允许这种情况公开,除非你的用户告诉你!
从技术角度来看,你可以直接去做。
我认为这不是一个好主意。首先,电子邮件包含需要进行 URL 编码的特殊字符,这样它们就不会与系统字符混淆(例如,对于 FTP 服务器,您可以像这样传递用户名 ftp://user:[email protected]) .
此外,从用户的角度来看,我不喜欢它,因为在这种情况下,我的电子邮件将保留在浏览器历史记录中。
在 GET 请求 URL 中使用电子邮件地址的另一个缺点是,此类请求往往会被安全工具视为可疑。
例如,我们看到 Azure 应用程序网关中的 Web 应用程序防火墙阻止了许多此类请求:
{
operationName: "ApplicationGatewayFirewall",
category: "ApplicationGatewayFirewallLog",
properties: {
requestUri: "/api/users/getuserbyemail/[email protected]",
ruleSetType: "OWASP_CRS",
ruleSetVersion: "3.0.0",
ruleId: "920440",
message: "URL file extension is restricted by policy",
action: "Matched",
details: {
message:
'Warning. String match within ".asa/ .asax/ .ascx/ .backup/ .bak/ .bat/ .cdx/ .cer/ .cfg/ .cmd/ .com/ .config/ .conf/ .cs/ .csproj/ .csr/ .dat/ .db/ .dbf/ .dll/ .dos/ .htr/ .htw/ .ida/ .idc/ .idq/ .inc/ .ini/ .key/ .licx/ .lnk/ .log/ .mdb/ .old/ .pass/ .pdb/ .pol/ .printer/ .pwd/ .resources/ .resx/ .sql/ .sys/ .vb/ .vbs/ .vbproj/ .vsdisco/ .webinfo/ .xsd/ .xsx/" at TX:extension. ',
data: ".com",
file: "rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf",
line: "1056",
},
policyId: "default",
// ...
}
}