Html 存储用户ID和其他数据并使用它查询数据库

Html 存储用户ID和其他数据并使用它查询数据库,html,security,cordova,local-storage,Html,Security,Cordova,Local Storage,我正在使用PhoneGap开发一个应用程序,并已将用户id和用户级别存储在本地存储中,例如: window.localStorage["userid"] = "20"; 一旦用户登录到应用程序,就会进行填充。然后在ajax请求中使用它来获取他们的信息和与他们的帐户相关的东西(其中一些是非常私有的)。该应用程序也被用于网络浏览器,因为我正在使用完全相同的网络代码。有没有一种方法可以被操纵?例如,用户更改它的值,以获取不是他们的信息 例如,如果浏览器中的另一个应用程序存储了相同的密钥“userid

我正在使用PhoneGap开发一个应用程序,并已将用户id和用户级别存储在本地存储中,例如:

window.localStorage["userid"] = "20";
一旦用户登录到应用程序,就会进行填充。然后在ajax请求中使用它来获取他们的信息和与他们的帐户相关的东西(其中一些是非常私有的)。该应用程序也被用于网络浏览器,因为我正在使用完全相同的网络代码。有没有一种方法可以被操纵?例如,用户更改它的值,以获取不是他们的信息

例如,如果浏览器中的另一个应用程序存储了相同的密钥“userid”,它将覆盖,然后他们将在我的应用程序中获取其他人的数据


如何防止这种情况发生?

在进一步攻击向量之前,将此类敏感数据存储在客户端不是一个好主意。使用令牌代替它,因为存储在客户端的每个数据都可能被攻击者欺骗

你的想法是对的。可能的攻击向量可能与不安全的直接对象引用有关。让我举一个例子

您正在客户端存储userID,这意味着您不能再信任该数据

window.localStorage["userid"] = "20";
黑客可以将该值更改为他们想要的任何值。可能他们会将其更改为小于20的值。因为最常见的用例显示20来自配置为自动递增的列。这意味着应该有用户ID为19或18或更少的有效用户

让我假设您的应用程序有一个通过用户ID获取产品的模块。所以后端查询应该类似于下面的查询

SELECT * FROM products FROM owner_id = 20
当黑客将这些值更改为其他值时。他们将设法获取属于其他人的数据。他们还可能有机会再次删除/更新属于其他人的数据

可能的恶意攻击向量实际上取决于您的应用程序和功能。正如我之前所说的,您需要弄清楚这一点,并且不要公开像userID这样的敏感数据

使用令牌而不是用户ID将解决可能的中断尝试。您只需要再创建一列并命名为“token”,然后使用它而不是userid。(不要忘记生成长且不可预测的标记值)


我不是安全方面的专家。正如您所说,用户可以伪造他人id并访问未经授权的数据。为什么不使用在后端(服务器)生成的会话令牌并使用它来验证事务呢。会话令牌可以存储在localstorage中。会话令牌是随机生成的,用户很难猜出令牌。
SELECT * FROM products FROM owner_id = iZB87RVLeWhNYNv7RV213LeWxuwiX7RVLeW12