怎样防止数据被篡改?
比如有一个游戏金币交易系统,记录着用户的剩余金币,假如数据库被黑,然后update了用户剩余金币,该怎么样防止和判断这种行为。这种情况一般很难发现,大家有什么高招?
bvb123
12 years, 2 months ago
Answers
我之前做过一个类似功能的东西,是B2C商城中的购物卡,可以当现金多次使用,我大概的说下我是怎么设计的:
首先每次算出来得余额都是经过加密后存储(余额不加密),
网站设置的私钥 为 privateKey
随机数 n 位 为 nrand (需要存数据库)
金额 以 100 为例 price (根据自己需要存储 比如仅仅用于显示;但是交易不是用这个钱)
使用可逆算法 拿 des为例(当然最好不要使用公开的加密算法)
加密的过程为 : encrypt = stringToHex(des(nrand.privateKey,price,1, 0, null)); // encrypt 需要存数据库
解密:
price = des (nrand . privateKey, hexToString(encrypt), 0, 0, null);
以上是一方面,还有对每笔交易记录log, 通过log也可以查询到剩余金额。
这样能防止了直接对数据库操作也是无用数据,除非知道了网站的加密算法,我感觉这样总比直接存储可用的金额要好。。
-shana
answered 12 years, 2 months ago