2016-07-23 53 views
0

我目前正在创建一个有趣的网站,并且我总共使用了php,javascript和mysql。如何使用php安全地更新数据库中的数据

我必须更新数据库中的数据。这是我的数据库的结构:

的recordId(自动编号) recordvalue(VARCHAR)

,并在我的HTML我有一个包含的recordId和recordValue表

当我点击编辑按钮。

的recordValue传递到文本输入 和的recordId传递给一个隐藏的输入。

是否安全?

还是有更好的方法来安全地做到这一点。

我已阅读了一些关于sql注入和会话的基本文章。

是否可以更改隐藏的输入值。在运行时。我的意思是点击编辑按钮后。那数据会发送到我的php代码?

我有这个php代码。

$stmt = $conn->prepare("CALL sp_updatedata (?,?)"); 

$stmt->bindParam(1, $userid, PDO::PARAM_INT, 10); 
$stmt->bindParam(2, $u_name, PDO::PARAM_STR, 30); 
$stmt->execute(); 
+1

您已经在使用准备好的语句是来自浏览器为合法或安全ST数据,从不在查询中直接包含它。如果你一直这样做,你不需要担心SQL注入。 – BeetleJuice

回答

1

首先,它的关键是要了解以下内容:假设用户可以看到一切您发送到浏览器。使用隐藏表单域是保护秘密安全的方法。只是不要将它发送给浏览器,如果你不希望用户知道它

好吧,在你的问题:在浏览器中会发生什么(如:记录值移动到文本框,并记录id隐藏字段)与SQL注入无关。当攻击者使您的数据库执行不需要的查询时,就会发生SQL注入。发生这种情况是因为程序员选择将来自用户的值直接插入到查询中。你看,这里的堆栈,尤其是在注册和登录查询了很多:

SELECT * from users_table WHERE username = $_POST[username] 

为了保护自己免受SQL注入,用准备好的语句

$stmt = $connection->prepare("SELECT...WHERE username = ?"); 
...bind the parameters to $_POST[username], then execute 
$stmt->execute() 

回顾一下

  1. 不要将任何内容发送到您不希望用户看到的浏览器/ javascript
  2. 不要
+0

但我如何更新数据或删除它?当我需要ID来执行查询?我如何隐藏ID给用户。即使他查看源代码?查看源代码很容易?但用户不能查看只有html代码的php代码。我的意思是如果我列出数据到一个HTML表格。即将做的事情是用ID列出数据。为了查询哪个记录要删除或更新 – askquestionzero

+0

我认为向用户显示item id是好的,所以你打算做的是好的。我只是想确保你明白,如果你把它发送给浏览器,你就不能保密。你说得对,PHP代码无法看到。 – BeetleJuice