Форум сетевых администраторов
Показаны 9 сообщений на этой странице

Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- http-авторизаци¤ на php (http://netadmin.ws/forum/showthread.php?threadid=4074)


Помещено peteK 26-01-2003 в 12:56:

http-авторизаци¤ на php

платформа: windows
web-сервер: apache

при выполнении кода:

PHP:


if(!isset($PHP_AUTH_USER)) {
    
Header('WWW-Authenticate: Basic realm="'.$config['sitename'].' Control Panel"');
    
Header('HTTP/1.0 401 Unauthorized');
    echo 
'Login and Password needed';
    exit;
  }


получаю ошибку 500.
В логах:
malformed header from script. Bad header=HTTP/1.0 401 Unauthorized: f:/apache/php/php.exe

на linux машине код выше работает как надо. ыскакивает окно логин/пароль и и т.д. и т.п.

Чего может нехватать в настройках php или apache?

__________________
www.relmax.com
Web Site Design and Development


Помещено Nevermind 26-01-2003 в 15:14:

А пхп как модуль стоит? Из мануала:

quote:
The HTTP Authentication hooks in PHP are only available when it is running as an Apache module and is hence not available in the CGI version.


Помещено peteK 26-01-2003 в 16:22:

эмм... спасибо, все заработало..
просто в install.txt для php, написано в httpd.conf добавить

# for the apache module
LoadModule php4_module c:/php/sapi/php4apache.dll
AddType application/x-httpd-php .php4

#for the cgi binary (you can use that one compiled with force cgi redirect too)
ScriptAlias /php4/ "C:/php/"
Action application/x-httpd-php4 "/php4/php.exe"
AddType application/x-httpd-php4 .php

НО НАДО ТО ТОЛЬКО первые три (точнее две - без комментариев) строки.

__________________
www.relmax.com
Web Site Design and Development


Помещено Tagore 29-01-2003 в 09:32:

Arrow Не совсем то, что тебе надо


PHP:

<?php
//auth_user.php
include "./common_db.inc";
$register_script = "./register.php";

function 
auth_user($userid, $userpassword) {
   global 
$default_dbname, $user_tablename;
  
   
$link_id = db_connect($default_dbname);
   
$query = "SELECT username FROM $user_tablename 
                             WHERE userid = '
$userid' 
                             AND userpassword = password('
$userpassword')";
   
$result = mysql_query($query);
   if(!
mysql_num_rows($result)) return 0;
   else {
      
$query_data = mysql_fetch_row($result);
      return 
$query_data[0];
   }
}

function 
login_form() {
   global 
$PHP_SELF;
?>
<HTML>
<HEAD>
<TITLE>Login</TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="<? echo $PHP_SELF ?>">
   <DIV ALIGN="CENTER"><CENTER>
      <H3>Please log in to access the page you requested.</H3>
   <TABLE BORDER="1" WIDTH="200" CELLPADDING="2">
      <TR>
         <TH WIDTH="18%" ALIGN="RIGHT" NOWRAP>ID</TH>
         <TD WIDTH="82%" NOWRAP>
            <INPUT TYPE="TEXT" NAME="userid" SIZE="8">
         </TD>
      </TR>
      <TR>
         <TH WIDTH="18%" ALIGN="RIGHT" NOWRAP>Password</TH>
         <TD WIDTH="82%" NOWRAP>
            <INPUT TYPE="PASSWORD" NAME="userpassword" SIZE="8">
         </TD>
      </TR>
      <TR>
         <TD WIDTH="100%" COLSPAN="2" ALIGN="CENTER" NOWRAP>
            <INPUT TYPE="SUBMIT" VALUE="LOGIN" NAME="Submit">
         </TD>
      </TR>
   </TABLE>
   </CENTER></DIV>
</FORM>
</BODY>
</HTML>
<?
}

session_start();
if(!isset(
$userid)) {
   
login_form();
   exit;
}
else {
   
session_register("userid", "userpassword");
   
$username = auth_user($userid, $userpassword);
   if(!
$username) {
      
session_unregister("userid");
      
session_unregister("userpassword");
      echo 
"Authorization failed. " .
           
"You must enter a valid userid and password combo. " .
           
"Click on the following link to try again.<BR>\n";
      echo 
"<A HREF=\"$PHP_SELF\">Login</A><BR>";
      echo 
"If you're not a member yet, click " .
           
"on the following link to register.<BR>\n";
      echo 
"<A HREF=\"$register_script\">Membership</A>";
      exit;
   }
   else echo 
"Welcome, $username!";
}
?>

__________________
Международное брачное агенство в Сибири.


Помещено Nevermind 29-01-2003 в 12:55:

Tagore,
А где здесь http-авторизация?

По коду замечание - лучше для работы с сессиями использовать массив $_SESSION, т.е. вбивать в него переменные напрямую без session_register(); во избежание возможных глюков (были прецеденты).

+ хороший тон -> делать mysql_free_result и закрывать соединение с базой из скрипта. Без обид


Помещено SCHIZO 29-01-2003 в 15:30:

quote:
session_register("userid", "userpassword");

...нафига? тем более пасворд...

__________________
FAQ OFF


Помещено polo 29-01-2003 в 15:33:

кстати в php 4.1.3 $_SESSION не работает.

polo добавил 29-01-2003 в 15:34:32:
точнее он не работает при создании нового элемента массива, не записывается.

__________________
Всегда есть решение.


Помещено SCHIZO 29-01-2003 в 15:57:

...не видно (и даже в комментариях не упомянуто)в каком месте данные проверяются..
результат может быть плачевным

PHP:


$query 
= "SELECT username FROM $user_tablename
WHERE userid = '
$userid'
AND userpassword = password('
$userpassword')";



вместо переменной $userid можно отправить через форму что-то типа DELETE * FROM tablename... или REPLACE ... или еще чего нибудь SQL`ное

одним словом SQL injection

__________________
FAQ OFF


Помещено Tagore 30-01-2003 в 07:48:

Nevermind
Да знаю, знаю. Хотел просто хоть может кому понадобиться если.

__________________
Международное брачное агенство в Сибири.


Формат времени GMT. Текущее время 07:15.
Показаны 9 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.