PHP站点管理认证页面
我已经为我的php站点创建了一个管理页面。我有一个我创建的管理页面,我想保护它(只允许我访问) 在不创建完整的登录系统的情况下,保护此页面的最简单方法是什么?这感觉太过分了,我害怕造成安全漏洞。我没有为网站的其余部分登录系统的其他需要 其他做过类似工作的人有什么建议或想法吗?PHP站点管理认证页面,php,authentication,Php,Authentication,我已经为我的php站点创建了一个管理页面。我有一个我创建的管理页面,我想保护它(只允许我访问) 在不创建完整的登录系统的情况下,保护此页面的最简单方法是什么?这感觉太过分了,我害怕造成安全漏洞。我没有为网站的其余部分登录系统的其他需要 其他做过类似工作的人有什么建议或想法吗? <?php $realm = 'Restricted area'; //user => password $users = array('Username123123' => 'Password1112
<?php
$realm = 'Restricted area';
//user => password
$users = array('Username123123' => 'Password1112313', 'Guest' => 'guest');
if (empty($_SERVER['PHP_AUTH_DIGEST'])) {
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Digest realm="'.$realm.
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
die('<h1>HTTP/1.1 401 Unauthorized</h1>');
}
// analyze the PHP_AUTH_DIGEST variable
if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||
!isset($users[$data['username']]))
die('<h1>Wrong Credentials!</h1>');
// generate the valid response
$A1 = md5($data['username'] . ':' . $realm . ':' . $users[$data['username']]);
$A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);
if ($data['response'] != $valid_response)
die('<h1>Wrong Credentials!!</h1>');
echo 'Your are logged in as: ' . $data['username'] . '<hr />';
// function to parse the http auth header
function http_digest_parse($txt)
{
// protect against missing data
$needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1);
$data = array();
$keys = implode('|', array_keys($needed_parts));
preg_match_all('@(' . $keys . ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@', $txt, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
$data[$m[1]] = $m[3] ? $m[3] : $m[4];
unset($needed_parts[$m[1]]);
}
return $needed_parts ? false : $data;
}
?>
创建一个cookie(仅使用一次setcookie(“admin”,“我是admin”,time()+$temps);或手动创建),并在每个网页中使用以下代码:
if (isset($_COOKIE['admin'])) {
//Do something
}
else { die(); }
当你问最简单的方法时
您可以使用IP进行比较:
$myIP="your-ip-here";
if($_SERVER['REMOTE_ADDR']!=$myIP){exit();}
也许你也可以做一些比较:
$myIP="your-ip-here";
$myGetParamPass="password";
if($_SERVER['REMOTE_ADDR']!=$myIP || $_GET['pass']!==$myGetParamPass){exit();}
然后使用您的IP地址和此链接访问页面:
www.site.com/page.php?pass=password
但是,如果您使用的是频繁变化的动态IP,则上述方法将不起作用。最简单的方法是:
<?
session_start();
$user = 'YOUR_USERNAME';
$password = 'YOUR_PASSWORD';
if($_POST['user'] == $user && $_POST['password'] == $password){
$_SESSION['logged'] = true;
}else{
$_SESSION['logged'] = false;
}
if($_SESSION['logged']){
echo "Logged in"
}else{
echo "Acces denied";
}
?>
我发现为具有“Htaccess”的单个用户创建安全区域的最简单方法
例如:
但这不是PHP或Mysql,而是Apache。我能想象的最简单的方式是
<?php
session_start();
if(isset($_POST['send'])){
if($_POST['pw'] == "somepassword"){
$_SESSION['LOGIN'] = true;
}
}
if(isset($_SESSION['LOGIN'])){
//your page
}else{ ?>
<form method="post" action=""> <p>Password:</p>
<input name="pw" type="password" />
<input name="send" value="send" type="submit" />
</form>
<?php
}
?>
密码:
我最初决定不这样做,因为我认为lighttpd(我正在使用的)没有类似的东西。我接受了这个答案,因为它是最简单的实现方法,并且做了我需要的一切。谢谢,有很多很好的答案-这是正常的协议吗?给出你最终要做什么的答案?@xur17你应该接受对你的需求最有帮助的答案。是的;)请注明出处。即使是手册也需要属性。