我在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 />";
}
答案 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
答案 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']!";
}