0

这是我网站管理页面登录的代码

<?php
//simple PHP login script using Session
//start the session * this is important
session_start();

//login script
if(isset($_REQUEST['ch']) && $_REQUEST['ch'] == 'login'){

//give your login credentials here
if($_REQUEST['uname'] == 'my_name' && $_REQUEST['pass'] == 'my_password')
$_SESSION['login_user'] = 1;
else
$_SESSION['login_msg'] = 1;
}

//get the page name where to redirect
if(isset($_REQUEST['pagename']))
$pagename = $_REQUEST['pagename'];

//logout script
if(isset($_REQUEST['ch']) && $_REQUEST['ch'] == 'logout'){
unset($_SESSION['login_user']);
header('Location:login.php');
}
if(isset($_SESSION['login_user'])){
if(isset($_REQUEST['pagename']))
header('Location:'.$pagename.'.php');
else
header('Location:admin.php');
}else{
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Website</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" type="text/css" href="styles.css" media="all" />


</head>
<body>

<form name="login_form" method="post" action="">
<h2 align="center"><strong>Admin Login</strong></h2>

<input type="text" name="uname" id="uname" placeholder="Username">
<input type="password" name="pass" id="pass" placeholder="Password">

<td colspan="2" align="center">
<p style="color:red;">
<?php
//display the error msg if the login credentials are wrong!
if(isset($_SESSION['login_msg'])){
echo 'Wrong username and password !';
unset($_SESSION['login_msg']);
}
?>
</p>

<div align="center" colspan="2"><input type="submit" value="Login"></div>
</tr>
<input type="hidden" name="ch" value="login">
</form>
</body>
</html>

我从一个网站上复制了这个,所以我不确定它有多安全。而且我也不太擅长 php。

这是安全使用还是容易破解?如果不是,谁能告诉我最好的非 MySQL 登录系统是什么?

4

1 回答 1

3

$_REQUEST 默认包含 $_GET、$_POST 和 $_COOKIE 的内容。

但这只是一个默认值,取决于 variables_order ;并且不确定您是否要使用 cookie。

如果我必须选择,我可能不会使用 $_REQUEST,我会选择 $_GET 或 $_POST——这取决于我的应用程序应该做什么(即一个或另一个,但不是两者):一般来说:

当有人从您的应用程序请求数据时,您应该使用 $_GET。当有人向您的应用程序推送(插入或更新;或删除)数据时,您应该使用 $_POST。无论哪种方式,性能不会有太大差异:与脚本的其余部分相比,差异可以忽略不计。

此外,您可能需要检查 XSS 和 CSRF。但是,这实际上取决于应用程序的要求。我不想直言不讳,但恕我直言,这看起来不像是安全或实用的登录代码块。另外,请问您为什么不打算使用数据库?使用存储的纯文本密码根本不是很安全。

如果您计划使用数据库,则以下内容适用。您的代码不会检查多个用户的数据库。它主要检查存储的密码。因此,除非您使用 db 来支持多个用户,否则应用程序的实用性将非常有限。此外,如果您打算使用数据库来存储和检索值,您需要确保用户输入了针对 SQL 注入的保护。另外,明智的做法是使用 md5、salt、sha1 或组合来加密密码。许多人使用加密组合。

于 2013-11-13T03:30:14.990 回答