Användarnamn Lösenord config.php 和conn 只是两个文件,一个是数据库连接,-6ren">
gpt4 book ai didi

php - 此脚本的安全性

转载 作者:行者123 更新时间:2023-11-29 04:12:11 24 4
gpt4 key购买 nike

我最近一直在构建登录脚本,我需要一些有关安全性的建议。谢谢。

<?php
session_start();

include 'inc/conn.php';
include 'inc/config.php';
include 'inc/session.php'; //Prevent session hijack

if (isset($_SESSION['banned'])) {
header("Location: banned.php");
exit;
}

if (isset($_POST['submit'])) {

if (isset($_SESSION['token'])
&& $_POST['token'] == $_SESSION['token']) {

$_POST['username'] = mysql_real_escape_string($_POST['username']);
$_POST['password'] = sha1($salt1 . $_POST['password'] . $salt2);

$user_query = "SELECT id, userlevel FROM users WHERE username = '" . $_POST['username'] . "' AND password = '" . $_POST['password'] . "'";
$user_result = mysql_query($user_query);

if (mysql_num_rows($user_result) == 0) {
$error = 'Fel användarnamn eller lösenord';
} else {

$row = mysql_fetch_assoc($user_result);

$banned_query = "SELECT * FROM bans WHERE user_id = " . $row['id'] . "";
$banned_result = mysql_query($banned_query);

session_regenerate_id();

if (mysql_num_rows($banned_result) == 0) {

$_SESSION['logged_in'] = TRUE;
$_SESSION['user_id'] = $row['id'];
$_SESSION['userlevel'] = $row['userlevel'];

header("Location: index.php");
exit;

} else {

$ban_row = mysql_fetch_assoc($banned_result);

$_SESSION['banned'] = TRUE;
$_SESSION['user_id'] = $ban_row['user_id'];

header("Location: banned.php");
exit;

}
}
}

}

$token = md5(uniqid(rand(), true));
$_SESSION['token'] = $token;

?>
<?php
if (!isset($_SESSION['logged_in'])) {
?>
<?php if (isset($error)) echo $error ?>
<form method="post" action="index.php">
<input type="hidden" name="token" value="<?php echo $token; ?>" />
Användarnamn<br />
<input type="text" name="username" value="" /><br />
Lösenord<br />
<input type="password" name="password" value="" /><br />
<input type="submit" name="submit" value="Logga in" />
</form>
<?php } else { echo var_dump($_SESSION); } ?>

config.php 和conn 只是两个文件,一个是数据库连接,另一个是两个静态变量。

session .php

<?php
$string = $_SERVER['HTTP_USER_AGENT'];
$string .= 'SHIFLETT';

$fingerprint = md5($string);

if (isset($_SESSION['HTTP_USER_AGENT']) &&
$_SESSION['HTTP_USER_AGENT'] != $fingerprint) {
session_unset();
session_destroy();
header("Location: index.php");
exit;
exit;
} else {
$_SESSION['HTTP_USER_AGENT'] = $fingerprint;
}
?>

有什么建议吗?

最佳答案

考虑使用 mysqli_xxx 函数而不是 mysql_xxx 函数。

请参阅 PHP 手册以获取 overview of the mysqli extension以及它与旧的 mysql 扩展有何不同。

使用 mysqli 函数将允许您使用准备好的语句等功能,这使得编写安全代码变得更加容易。

作为基本级别,迁移到 mysqli 库是一组相当微不足道的更改。开始使用准备好的语句等的更改可能会稍微多一些工作,但非常值得。

仍然使用旧的 mysql 函数的唯一原因是如果你被困在旧版本的 MySQL 上。但如果是这种情况,您可能还有很多其他安全问题需要担心。

希望对您有所帮助。

关于php - 此脚本的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7462038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com