今天我了解到,在服务器场上,我不能使用validationKey="AutoGenerate"
,而是为 指定一个“固定”字符串值validationKey
,以确保场服务器处理请求的一致性。给出的例子是:
<machineKey
validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7
AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"
decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
validation="SHA1"
decryption="AES"
/>
我的印象是,为每个请求和每个用户生成一个新密钥大大增强了安全性,但如果密钥是恒定的,它会从表单上的隐藏字段中检索并用于伪造请求。
或者我必须在服务器场上停止使用隐藏字段作为此键,而是使用标头或 cookie 吗?
我说防伪密钥存储在表单中,因为这个 Razor 标记:
@Html.AntiForgeryToken()
呈现此 HTML:
<input name="__RequestVerificationToken" type="hidden" value="bH6_-oZcRMuC9tA13RrOzmr0N3sWrzgkjKOhg2igHs5K2-G0HbJbF3KaK-QMrUDcQTXFbHJ-HFMNn9AjvF-TkAuBFo5f8Afi8q0OHXBzOTI1">
除非我们在这里讨论不同的键,但那将如何工作?