我对react (或者更确切地说redux)商店安全性有一些一般性的问题:是否有可能以某种方式从前端操纵商店状态?例如,从前端设置一些"isLoggedIn“或"isAdmin”属性为真?
我认为商店可能在客户端浏览器上的某个地方,并保存在内存中。然后,存储必须来自加载并注入到浏览器上的html中的javascript包,对吧?我是否可以像浏览器中的某个视图部件一样访问商店,然后对其进行操作?或者它更复杂?
发布于 2021-08-03 10:08:47
是的,它可以很容易地操作。查看浏览器DevTools中的“应用程序”选项卡。根据是将其存储在LocalStorage还是SessionStorage中,您可以找到一个代表整个存储对象的JSON对象。您也可以对其进行编辑或删除。您可以尝试向存储添加一些中间件来对当前状态进行签名,但整个签名和验证代码必须发送到客户端并在那里执行。所以这只会让攻击者的事情变得更难,但也不是不可能。您可以在没有存储空间的情况下完成此操作,并将其保存到RAM中,但是当用户刷新页面时,存储空间将消失。
然而,在后端站点上,将每个客户端视为说谎者,并仔细检查任何身份验证/授权信息。在前端,您可以在普通应用程序数据和安全信息之间进行拆分。安全相关信息可以在每次页面刷新时重新加载,但也可以操作服务器响应。因此可以用一些RSA Public/Privatekey对其签名以保存。然后,您可以将此信息存储在React Context中,并将其提供给每个组件。
正常的应用程序数据可以保留在Redux存储中并以正常的方式使用。
发布于 2021-08-03 09:33:53
是的,您可以使用store.getState()获取当前状态,使用store.dispatch()设置一个新值。
也有其他选择的钩子。参考here
https://stackoverflow.com/questions/68633519
复制相似问题