如何安全地使用PHP从数据库更新数据

时间:2016-07-23 06:42:33

标签: php

我目前正在创建一个有趣的网站,而且我是php,javascript和mysql的初学者。

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

的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 个答案:

答案 0 :(得分:1)

首先,了解以下内容至关重要:假设用户可以看到您发送到浏览器的所有。使用隐藏的表单字段是没有方式来保护机密安全。如果您不希望用户知道它,请不要将其发送到浏览器

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

    JXDatePicker picker = new JXDatePicker();
    //picker.setDate(Calendar.getInstance().getTime());
    picker.setFormats(new SimpleDateFormat("dd.MM.yyyy"));
    picker.setDate(Calendar.getInstance().getTime());
    picker.setBounds(50,130,100,25);
    f.add(picker);

为了防止SQL注入,请使用预准备语句

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

回顾

  1. 不要向您不希望用户查看的浏览器/ javascript发送任何内容
  2. 不要将来自浏览器的数据视为合法或安全,并且不要将其直接包含在您的查询中