2010-06-28 4 views
0

내 하나의 파일을 제외한 회원 스크립트가 작동합니다. 로그인 양식에 사용자 이름과 암호를 입력하면 check.php가 "모든 정보를 입력하십시오."라는 메시지를 표시합니다. 로그인 양식에 대한 유일한 정보는 사용자 이름과 암호입니다. 로그인 폼의 동작은 check.php에 게시됩니다.회원 스크립트에서 하나의 PHP 파일이 작동하지 않습니다.

내 데이터베이스에서 사용자 이름과 md5 암호화 된 비밀번호를 확인하고 회원 영역으로 리디렉션하려면이 스크립트가 필요합니다. 나는 무작위 암호를 사용하고있다. 이것은 유일한 문제입니다. 다음은 check.php 스크립트입니다. 이 일을 위해 내가해야 할 일을 알려주십시오. 나는이 스크립트를 다른 사람으로부터 받았고 그것도 수정하는 방법을 모른다. 나는 PHP를 모른다. 복사하여 붙여 넣기 만하면됩니다. 감사합니다

============================ 

<? 
/* Check Username Script */ 
session_start(); // Start Session 

include 'database.php'; 
// Conver to simple variables 
$username = $_POST['username']; 
$password = $_POST['password']; 

if((!$username) || (!$password)){ 
    echo "Please enter ALL of the information! <br />"; 
    include 'login_form.html'; 
    exit(); 
} 

// Convert password to md5 hash 
$password = md5($password); 

// check if the user info validates the db 
$sql = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' AND activated='1'"); 
$login_check = mysql_num_rows($sql); 

if($login_check > 0){ 
    while($row = mysql_fetch_array($sql)){ 
    foreach($row AS $key => $val){ 
     $$key = stripslashes($val); 
    } 
     // Register some session variables! 
     session_register('first_name'); 
     $_SESSION['first_name'] = $first_name; 
     session_register('last_name'); 
     $_SESSION['last_name'] = $last_name; 
     session_register('email_address'); 
     $_SESSION['email_address'] = $email_address; 
     session_register('special_user'); 
     $_SESSION['user_level'] = $user_level; 

     mysql_query("UPDATE users SET last_login=now() WHERE userid='$userid'"); 

     header("Location: members.php"); 
    } 
} else { 
    echo "You could not be logged in! Either the username and password do not match or you have not validated your membership!<br /> 
    Please try again!<br />"; 
    include 'login_form.html'; 
} 
?> 

여기는 복사 할 수있는 스크립트의 유일한 부분입니다. 세션을 사용 중입니다. 조치는 POST입니다.

+0

정확하게 문제는 무엇입니까? 조금이라도 효과가 있습니까? PHP 경고/오류가 있습니까? 위와 같이 형식이 지정되지 않은 것을 보는 것은 어렵습니다. – Redlab

+0

login_form.html 게시는 어떻습니까? 양식 작업으로 "GET"과 반대로 사용자 이름/게시물 변수가 "POSTED"입니까? – bpeterson76

답변

1

$ username $ 비밀번호 변수를 설정하거나 양식에 오타처럼 들릴 수 있습니다. 양식 입력에서 이름이 올바른지 확인하십시오.

또한! $ username 대신 isset ($ username)을 사용하는 것이 더 좋습니다. 경고를하지 마십시오.

0

login_form.html의 내용을 게시하십시오. 이 양식은 POST 대신 GET을 사용하거나 입력 필드 이름이 "username"및 "password"가 아닌 것으로 추측됩니다. 다른

뭔가 : 이것은 공격자가 SQL 문을 조작 할 수 있다는 것을 의미

$username = $_POST['username'] 
mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' AND activated='1'"); 

:이 코드는 매우 심각한 보안 문제가 포함되어 있습니다. 예를 들어 사용자 이름 :

admin'-- 

이 SQL 쿼리가 발생합니다 :

SELECT * FROM users WHERE username='admin'--' AND password='egal' AND activated='1' 

의미

SELECT * FROM users WHERE username='admin' 

을 그리고 사용자가 이름이있는 경우 액세스 권한을 부여한다 "는 관리자가"무시 존재 비밀번호.

참고 : 필터링은 - 다른 방법으로 재미를 보는데 도움이되지 않습니다. 입력에서 특수 문자를 이스케이프하려면 mysql_real_escape_string ($ username)을 사용해야합니다. 자세한 내용은 http://php.net/manual/en/function.mysql-real-escape-string.php

1

양식에서 사용자 이름과 암호를 묻는 입력 필드에 올바른 이름이 지정되어 있는지 확인하십시오. 예를 들어

: name= 후 값이 변수 이름으로 전달되는 어떤

<input type='text' name='username'> 
<input type='password' name='password'> 

. 제출되고있는 양식의 HTML을 게시하는 경우

$_POST['thisIsMyName']; 

, 우리는 당신에게 추가 정보를 제공 할 수 있습니다 : 입력 필드 것을 보여주기 위해 :로

<input type='text' name='thisIsMyName'> 

은 PHP 스크립트에 표시됩니다 그 위에.

관련 문제