проблем със защита с име и парола чрез HTTP authentication

proba

Registered
ето кодът който deam0n е дал в урок:

Код:
<?php 
$realm = 'Забранена зона'; 

//име - парола 
$users = array('dada' => 'dada'); 


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('<font color="red" size="5"><b>ACCESS DENIED</b></font>'); 
} 


if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) || 
!isset($users[$data['username']])) 
die('Грешно име или парола!'); 


// генерира валиден отговор 
$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('Wrong Credentials!'); 

// ок, правилно име и парола 
echo 'хохохо ' . $data['username']; 

// функция която да парсне http auth header-a 
function http_digest_parse($txt) 
{ 
// защита срещу липсващи данни 
$needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1); 
$data = array(); 

preg_match_all('@(\w+)=(?:([\'"])([^\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; 
} 
?>

така в урокът в коментарите той е написал че където има > трябва да стане ]]
за да не дава проблеми.
това го управих.
но не иска да се логне.
пиша потребител dada и парола dada
както са зададени в файла и не се логва.
някъде има проблем но не го виждам.
някой може ли да помогне ?
 
Виж това дали ще ти помогне:

Код:
<?php
session_start();
ob_start();

$authorized = false;

if(isset($_GET['logout']) && $_SESSION['auth']) {
    unset($_SESSION['auth']);
}

if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
    $user = 'dada'; // име
    $pass = 'dada'; // парола
    if (($user == $_SERVER['PHP_AUTH_USER']) && ($pass == ($_SERVER['PHP_AUTH_PW'])) && (!empty($_SESSION['auth']))) {
        $authorized = true;
    }
}

if (isset($_GET['login']) && !$authorized) {
    header('WWW-Authenticate: Basic Realm="Login please"');
    header('HTTP/1.0 401 Unauthorized');
    $_SESSION['auth'] = true;
    print('Грешно име или парола');
    exit;
}

if ($authorized)
{
	// ако си логнат
	echo "<a href=\"?logout\">Изход</a>";
}
else
{
	echo "Не си логнат";
}
?>

Източник: php.net с малко промени от мен :)

Влиза се така:
fail.php?login
 
а каква е разликата дали ще е Digest или Basic ?
вградих си го в логин файла който взима потребителите от базата данни

Код:
<?php
ob_start();
include "connect.php";
echo '<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">';
$realm="Cpanel Pro8";
header('HTTP/1.1 401 Unauthorized'); 
header('WWW-Authenticate: Basic realm="'.$realm.'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"'); 
$db_conn = mysql_connect("$host", "$dbusername", "$dbpassword")
or die("unable to connect to the database");
mysql_select_db("$db", $db_conn) or die("unable to select the database");
$username=$_SERVER['PHP_AUTH_USER'];
$password=$_SERVER['PHP_AUTH_PW'];
$sql="SELECT * FROM users WHERE username='$username' and password='$password'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1)
{
session_register("username");
session_register("password");
echo '<META HTTP-EQUIV="Refresh" CONTENT="0; URL=index.php"> ';
}
else
{
echo '<META HTTP-EQUIV="Refresh" CONTENT="0; URL=index.php"> ';
}
ob_end_flush();
?>

когато е WWW-Authenticate: Basic си работи (само че така в полето има надпис икоито не ми харесва. някви простотий - този сървър изисква вашите имеи парола да бъдат изпратени по незащитен начин.
а като ог направя с 'WWW-Authenticate: Digest
го няма това съобщение но не иска да логва.. :idea:
 
Ами здравейте и от мен!
Искам да попита относно кода на HunteR нещо.
Как да накарам след влизане чак тогава да ми echo или не знам по какъв начин да ми показва един скрипт за ъплоуд на картинки, но със сигурност upload скрипта да е на същата страница, но да не се изпълнява преди да е въведена каквато и да била информация!
Ето го и скрипта:
Код:
 <?php 
echo ' 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Thumbnail Script</title> 
<meta http-equiv="content-type" content="text/html; charset=windows-1251"> 
</head> 
<body> 
<center> 
'; 
if(isset($_POST['upload'])){//долният код се изпълнява, когато е натиснат бутонът Изпрати 
function upload_small($tmp_name,$file_type,$path_small){//upload с промяна на ширина и височина на картинката 
if(!file_exists($path_small)){//проверка дали съществува файл със същото име 
if($file_type=="image/pjpeg" or $file_type=="image/jpeg" or $file_type=="image/gif" or $file_type=="image/x-png" or $file_type=="image/png"){//проверка дали файлът е картинка 
list($width,$height)=getimagesize($tmp_name); 
define("WIDTH","150");//ширина 150 пиксела - тук може да промените 150 за ширина 
define("HEIGHT","150");//височина 150 пиксела - тук може да промените 150 за дължина 
if($width<WIDTH and $height<HEIGHT){//ако ширината и височината са по-малки от WIDTH и HEIGHT 
move_uploaded_file($tmp_name,$path_small); 
}elseif($width>=WIDTH){//ако ширината е по-голяма или равна на WIDTH 
$new_width= WIDTH;//задаване на нова ширина 
$new_height= HEIGHT;//задаване на нова височина 
//избиране на функцията за разчитане на картинката 
if($file_type=="image/pjpeg" or $file_type=="image/jpeg"){ 
$imagecreatefrom="imagecreatefromjpeg"; 
}elseif($file_type=="image/gif"){ 
$imagecreatefrom="imagecreatefromgif"; 
}elseif($file_type=="image/x-png" or $file_type=="image/png"){ 
$imagecreatefrom="imagecreatefrompng"; 
} 
//край на избиране на функцията за разчитане на картинката 
$image_p=imagecreatetruecolor($new_width, $new_height);//създаване на нова картинка с новите размери 
$image=$imagecreatefrom($tmp_name);//разчитане на оригиналната картинка 
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);//създаване на малката картинка 
imagejpeg($image_p, $path_small, 100);//записване на малката картинка с качество 100 
}elseif($height>=HEIGHT){//ако височината е по-голяма или равна на HEIGHT 
$new_height= HEIGHT;//задаване на нова височина 
$new_width= (int) ($width*$new_height)/$height;//задаване на нова ширина 
//избиране на функцията за разчитане на картинката 
if($file_type=="image/pjpeg" or $file_type=="image/jpeg"){ 
$imagecreatefrom="imagecreatefromjpeg"; 
}elseif($file_type=="image/gif"){ 
$imagecreatefrom="imagecreatefromgif"; 
}elseif($file_type=="image/x-png" or $file_type=="image/png"){ 
$imagecreatefrom="imagecreatefrompng"; 
} 
//край на избиране на функцията за разчитане на картинката 
$image_p=imagecreatetruecolor($new_width, $new_height);//създаване на нова картинка с новите размери 
$image=$imagecreatefrom($tmp_name);//разчитане на оригиналната картинка 
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);//създаване на малката картинка 
imagejpeg($image_p, $path_small, 100);//записване на малката картинка с качество 100 
} 
}else{ echo 'Файлът не е картинка!'; exit; } 
}else{ echo 'Такъв файл вече съществува!'; exit; } 
} 
define("URL","http://10.0.28.170/images/news_thumb/");//дефинираме адреса на сайта до първата папка images с / накрая 
$file_name=$_FILES['ufile']['name'];//името на картинката 
$tmp_name=$_FILES['ufile']['tmp_name'];//път до временното положение на картинката 
$file_type=$_FILES['ufile']['type'];//тип на картинката 
$path_small = "../images/news_thumb/".basename(strtolower($file_name));//път за upload на малката картинка с малки букви 
upload_small($tmp_name,$file_type,$path_small);//upload на малката картинка 
//тук показваме картинката и адреса й и използваме дефинирания по-горе URL 
echo '<br><img src="'.$path_small.'"alt='.$file_name.' title='.$file_name.'><br>'; 
echo '<br>Име: '.$file_name.'   Тип на файла: '.$file_type.'';
echo '<br>URL: 10.0.28.170/rosko/'.$path_small.'<br>'; 
//край на показване картинката и адреса им  
}else{ 
if(!function_exists("gd_info")){//проверка за GD библиотека 
echo 'GD Graphics Library не е инсталирана на този сървър!'; 
}else{ 
echo ' 
<form action="" method="post" enctype="multipart/form-data"> 
<input type="file" name="ufile"><br> 
<input type="submit" name="upload" value="Изпрати"> 
</form> 
'; 
} 
} 
echo ' 
</center> 
</body> 
</html> 
'; 
?>
Също, мога да направя изключение да е на друга страница кода, но да се прави проверка за

:D Вярно, че кода е малко преработен и е от WT, но не съм го копирал в друг сайт! :)
Благодаря +1...!
 
rosko каза:
Благодаря +1...!

Само да отбележа, че +1 можеш да дадеш САМО ако си автор на темата, а ти не си в този случай. Пусни нова тема.
 

Back
Горе