2011-02-24 127 views
0

我想存储一些变量到客户端,目前,我有几个选择(JavaScript变量,cookie,会话),因为我想减少服务器的工作量,所以传入的参数不会检查在服务器端。Javascript存储变量

例如,

客户端

<div id="showmoney"></div> 

<script> 
var money=10000; 

$('#showmoney').html(money); 

function changemoney() 
{ 

{ pass the variable 'money' by ajax to php...} 

} 
</script> 

PHP侧

<? 

$money = $_POST['money']; 

$sql = "UPDATE user_details SET money = ".$money." WHERE uid = 123"; 
{ do query...} 

?> 

有什么方法使之更安全,因为我怕有人可以修改工具的JavaScript变量(萤火虫?如果是,怎么办?)

非常感谢〜:)

+0

也请理解,如果你真的在处理金钱问题,你需要更好地掌握安全。你的代码至少会显示两个问题(问题的关键和SQL注入)。比如看看http://www.amazon。com/Web-Application-Hackers-Handbook-Discovering/dp/0470170778根据你生活的国家和你造成的损害,如果你没有采取合理的安全措施,你可能会被视为负有法律责任。 – Andrea 2011-02-24 15:44:15

+0

谢谢Andrea,以及所有人,我从你身上学到了很多东西,并且在搜索过程中我发现一个页面非常有用http://www.slideshare.net/billkarwin/sql-injection-myths-and-fallacies,而我不必担心我的问题,因为我是一个错误的方式:) – ykc 2011-02-24 16:13:45

回答

2

您不希望用户更改的每个变量(例如价格标签)都必须存储在服务器上而不是客户端上。有很多方法可以改变客户端发送给你的东西,而FireBug只是最简单的工具。更复杂的工具将允许拦截和编辑每个HTTP请求..

+0

你是对的,但JavaScript中的密码是一个选项,如果你想这样做。 – 2011-02-24 15:35:04

+0

我不这么认为。加密库和编码密钥都将在客户端上提供,任何人都可以编码和提交不同的值,尽管他们可能无法对其进行解密。 – Andrea 2011-02-24 15:40:41

2

有什么方法使之更安全,因为我怕有人可以修改工具的JavaScript变量(萤火?如果是,怎么样?)

您永远无法信任来自客户端的传入数据。它总是可以被操纵的。像需要在服务器端执行的基本检查 - 客户端检查仅仅是为了用户的方便。

此外,您显示的代码有一个SQL injection漏洞,您应该理清它。

+0

感谢Pekka,我只是发现什么是你的SQL注入,非常感谢〜 – ykc 2011-02-24 16:15:11

1

您必须调整您的愿望,以便在安全性需求的情况下在客户端上存储性能。敏感信息只应在服务器上。任何精明的网络用户都可以调整JavaScript。通过在客户端上放置其他不太敏感的信息来节省带宽。

+0

THanks hygotcodes,我会把更多的安全的东西:) – ykc 2011-02-24 16:17:28

2

您存储在客户端(浏览器)中的任何内容都可以被操纵。解决您的问题的方法是验证发回服务器的信息没有被篡改。

+0

谢谢cingoTimo,似乎我现在需要写更多的代码:) – ykc 2011-02-24 16:14:25

1

您是否知道客户端数据库存储HTML5中全新的API?试图找到与他们的溶剂。可能有助于您在客户端保存一些数据。

+0

谢谢Ian Moss ,但是我目前不会使用HTML5,也许在大多数用户(用户使用的浏览器)准备就绪后:) – ykc 2011-02-24 16:16:46

2

人们可以对他们想要的页面做任何事情。

在谷歌浏览器的调试器(用Ctrl +希夫+ J访问),他们可以做的控制台以下:

money = 10000000000000; //Or whatever arbitrary value they choose 
changemoney(); 

正如其他人所说,永远不要相信任何人传递到从服务器客户端。服务器需要做一个完整性检查。

+0

感谢Peter Of The Corn,无法逃离代码:) – ykc 2011-02-24 16:14:08