在PHP中将mysql信息从一个页面移动到另一个页面

时间:2011-05-27 08:29:08

标签: php mysql

我在view.php中有以下代码,我想将信息带到edit.php而不会影响安全性或显示变量中包含的内容。 edit.php有一个表单来编辑数据库中的信息。

    while ($row = mysql_fetch_assoc($result))
    {
        echo "<a href=\"edit_employee.php?$row[employee_id_passport]\">" . $row['first_name'] ." " . $row['surname'] . "</a>";

        echo "<br />";
    }

5 个答案:

答案 0 :(得分:3)

您已经在安全性方面做出妥协 - 请参阅SQL注入和转义字符串。

此外,通常的做法是通过要求(请参阅require_once()require()函数)文件来包含应用程序的其他模块。它本身不是一个安全漏洞,但确实将所有全局变量,函数和类包含在该脚本中。

如果您确实需要,可以取消设置(见unset())您设置的所有变量,但只保留您想要传递的数据。

了解如何编写干净安全的代码,这将是安全的。将一个PHP文件包含在另一个文件中并不是一种不安全的做法。

修改

一些开始可能是创建具有私有或受保护属性和公共方法的类,然后使用它们来存储敏感信息并执行某些操作。通过使用 encapsulation ,您可以实现所需。

答案 1 :(得分:0)

您应该只允许登录用户查看或编辑该信息,您也可以使用以下命令获取SQL注入:

 $first_name = $_POST['first_name'];
 $sql_query = "SELECT  * FROM employee_master  WHERE first_name = '$first_name'";
 $result = mysql_query($sql_query, $connection);

你应该改为:

 $first_name = mysql_real_escape_string( $_POST['first_name']);
 $sql_query = "SELECT  * FROM employee_master  WHERE first_name = '$first_name'";
 $result = mysql_query($sql_query, $connection);

答案 2 :(得分:0)

执行此操作的最佳方法是(假设您无法执行除使用标准锚链接传递变量之外的任何其他操作)在表中具有每个记录的id的md5。这样你就可以了

while($row = mysql_fetch_assoc($res))
{
echo "<a href=\"edit_employee.php?chksum=$row['md5']\">" . $row['first_name'] ." $row['surname'] . "</a>";
}

现在在edit.php中检索它并将其与散列进行比较。

更安全的方法是将记录的id与另一个唯一数据(例如join date或dob)连接起来并散列整​​个字符串。这样会非常安全。

答案 3 :(得分:0)

选项1:只需通过链接从数据库中删除ID即可。如果用户知道id,但不知道任何其他信息,那么它就没用了。使用其他东西只会带来更多的代码行。

选项2:SESSION

中设置用户ID

答案 4 :(得分:0)

$first_name = mysql_real_escape_string( $_POST['first_name']);

session_start();
$_SESSION['loggedin'] = true;
$_SESSION['first_name'] = $first_name;

然后将数据库中的其他值设置为会话变量,例如用户姓:

$_SESSION['surname'] = $row['surname'];

然后,您可以从任何其他页面

if ($_SESSION['loggedin'] == true) {
    echo "Welcome $_SESSION['first_name'] $_SESSION['surname']!";
}