【发布时间】:2019-10-08 05:26:54
【问题描述】:
我需要在 php 中设置一个名为 BusinessID 的会话,但它在我的实时服务器上不起作用,我无法弄清楚它有什么问题
发生的情况是它执行了第一个查询但没有设置会话并重定向到dashboard.php
这是代码
<?php
if ($link === false) {
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Attempt insert query execution
if(isset($_POST["register"]))
{
$company = $_POST["company"];
$address = $_POST["address"];
$contact = $_POST["contact"];
$city = $_POST["city"];
$tags = $_POST["tags"];
$email = $_POST["email"];
$password = $_POST["password"];
$sql="INSERT INTO business(`companyname`, `email`, `password`, `address`, `tel`, `city`, `tag`,`status`, `created_at`,`type`)
VALUES('$company','$email','$password','$address','$contact','$city','$tags','unblocked',CURRENT_TIMESTAMP,'Null')";
if (mysqli_query($link, $sql)) {
$query = "select id from business where email='$email' and password='$password'";
$result = mysqli_query($link,$query);
if (mysqli_fetch_assoc($result))
{
$_SESSION["businessID"] = $result[0]["id"];
header("Location: dashboard.php");
}
else
{
header("Location: login.php?Invalid= Please Enter Correct User Name and Password ");
}
}
else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
}
// Close connection
mysqli_close($link);
?>
【问题讨论】:
-
警告!您对 SQL 注入攻击敞开心扉!您应该使用参数化的prepared statements,而不是像这样直接在查询中使用完全未转义的用户数据。
-
永远不会永远不会以纯文本形式存储密码!您应该总是使用password_hash() 对密码进行哈希处理,并且只存储哈希值。然后你可以使用password_verify() 来根据哈希验证密码。
-
无论您需要在哪里设置或获取会话,您都必须在文件中启动一次会话。包括 php session_start();在您的文件之上运行。请记住,您还必须在访问会话的其他文件上编写此函数。如果你所有的文件都是从一个文件加载的,即 index.php 你可以在文件上写一次。
-
除了 Magnus 提到的漏洞。代码还容易受到xss攻击、csrf attck、html注入攻击、会话固定攻击……