识别服务器端客户端浏览器中的内容更改

Posted

技术标签:

【中文标题】识别服务器端客户端浏览器中的内容更改【英文标题】:Identify content change in client browser on server side 【发布时间】:2018-01-19 20:59:39 【问题描述】:

我将一些数据存储在 html 字段中以用于显示目的。 当我通过检查元素更改该字段的值时,它也会在服务器端更改。

由于项目要求,我无法对此类字段使用服务器端验证。

具有实际值的字段:-

<input type = "text" name = "field1" id = "field1" value = "1234" readonly>

检查元素后的值变化:-

<input type = "text" name = "field1" id = "field1" value = "56" readonly>   

禁用检查元素不是一个好的解决方案。我总是想在服务器端获得这些字段的实际值。 如果值有任何变化,我能够确定客户端已更改数据。 请帮我解决这类问题。

【问题讨论】:

当我通过检查元素更改该字段的值时,它也会在服务器端更改。这怎么可能? 客户端总是可以修改 DOM - 尝试阻止这种情况发生完全是浪费时间。让您的服务器代码更健壮会更好地利用时间,以便您希望具​​有特定值的任何值都在服务器上进行验证。 我想说你需要某种形式的服务器端验证才能做到防弹。 【参考方案1】:

您应该避免让自己陷入需要信任客户的境地。通常 DOM 可以随时修改,并且您发送的表单的内容可以由客户端定制,而您无法使用纯 HTML 来阻止它。

如果值有任何变化,我可以确定客户端已更改数据。请帮我解决这类问题。

换句话说,您想要验证您发送到服务器的那些特定值。一般来说,你需要做到以下几点:

确定您信任的参与者来定义这些值(无论是客户端、目标服务器还是其他一些组件等...) 为这些参与者提供一种方法来验证您不想在定义后被操纵的值。这将需要一个秘密。例如,您可能想看看数字签名。 建立一种机制来验证目标值的真实性。例如,让您的服务器验证来自浏览器的数据值的签名。

如果定义这些值的参与者是您的目标服务器(与验证者相同的参与者)并且这些值对安全性至关重要,那么首先应该没有理由将它们发送到客户端 - 或者如果读取访问权限是很好,至少没有客户端将值发送回服务器。

如果您的源和目标是不同的参与者并且您需要在它们之间建立信任关系,那么消息身份验证就会出现。

无论如何,您的问题的解决方案远远超出 HTML 或客户端 javascript

【讨论】:

【参考方案2】:

只读元素是不可编辑的,但会在相应的表单提交时发送。 禁用的元素不可编辑,也不会在提交时发送。

所以您必须使用“禁用”而不是“只读”。 如果需要,您可以直接从服务器端获取值。

谢谢

【讨论】:

以上是关于识别服务器端客户端浏览器中的内容更改的主要内容,如果未能解决你的问题,请参考以下文章

HTTP协议

必须在客户端或服务器端更改哪些内容才能使 getJSON() 工作?

我需要更改网页的内容而不刷新服务器端发生更改的位置

探讨Web开发中的Session存储与管理

Server-Side Rendering(服务端渲染)的优点与缺点

已识别登录 - 此号码的任何后端存储?