2013-05-16 3 views
3

사용자 이름과 비밀번호가 데이터베이스에 설정된 계정과 일치하는지 확인하는 로그인 확인 스크립트를 만들었습니다. 모든 작품은 괜찮지 만 대소 문자를 구별하지 않아도된다. 이 스크립트에서 대문자/소문자를 확인하도록하려면 어떻게해야합니까? 예 : 사용자 이름 : AdMin 비밀번호 : My43sGG가있는 계정이 있습니다. 로그인 필드에 admin과 my43sgg를 입력하면 작동합니다.사용자 이름과 암호를 어떻게 확인 하시겠습니까?

내 스크립트하십시오 (!) 참고로

<?php 

// connect to the database 
include("config.php"); 

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 
$sql="SELECT * FROM " .$members. " WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1){ 

// Register $myusername, $mypassword and redirect to file "login_success.php" 
session_register("myusername"); 
session_register("mypassword"); 
header("location:index.php"); 
} 
else { 
?> 
+5

** 일반 텍스트 암호를 저장하지 마십시오 시도 (또는 그 문제에 대해, 기존의'mysql_' 기능을 사용합니다.) 암호 저장 및 PDO/mysqli에 대한 PHPass로 봐 데이터베이스 액세스. – DCoder

답변

4

사용 BINARY

WHERE BINARY username = BINARY '$myusername' AND 
     BINARY password = BINARY '$mypassword' 

은 쿼리가 0123에 취약 변수의 값 (s)이 외부에서 제공된 경우입니다. 그것을 막는 방법을 배우려면 아래 기사를보십시오. PreparedStatements을 사용하면 값 주위에 작은 따옴표를 사용하지 않아도됩니다.

+0

다음과 같이 쿼리를 다시 작성했습니다. $ sql = "SELECT * FROM". $ members. "WHERE BINARY username = BINARY '$ myusername'및 BINARY password = BINARY '$ mypassword'"; 하지만 그건 작동하지 않습니다 .. 내가 뭘 잘못하고 있니? –

+0

오류가 있습니까? –

+0

답변을 바탕으로 해결책을 찾을 수있었습니다. 고맙습니다! –

0

당신은 질문에 해당 사항 없음이

function isPartUppercase($string) { 
if(preg_match("/[A-Z]/", $string)===0) { 
    return true; 
} 
return false; 
} 
3

처럼 유효성을 검사하는 사용자 정의 함수를 작성할 수 있지만 AES 자체에 암호를 암호화하는 경우 더 나은 것 공유 비밀로하고 데이터베이스에서 AES로 암호화 된 문자열을 찾아 보았습니다 .... 나는 또한 문제가 다른 케이스로 암호화되어 있다면 다를 것이라고 생각합니다.

+1

좋은 생각이지만 실제로는 bcrypt와 같은 해시 알고리즘을 사용해야합니다. – HamZa

+0

의견을 보내 주셔서 감사합니다. 비록 AES 암호화에 대한 지식이 없지만 ... –

+1

그 기능이 있습니다;) 여기에 bcrypt가 cyberdev에서 제안한대로 http://stackoverflow.com/questions/4795385/how-do-you-use-bcrypt -for-hashing-passwords-in-php –

-2

는 **!이 하나

<?php 
session_start(); 
$errorMessage = ''; 
if (isset($_POST['txtUserId']) && isset($_POST['txtPassword'])) { 

    $userId = $_POST['txtUserId']; 
    $password = ($_POST['txtPassword']); 
    require_once("db_fns.php"); 
    db_connect(); 
    $sql = "SELECT * 
      FROM adminuser 
      WHERE username = '$userId' AND password = '$password'"; 

    $result = mysql_query($sql) or die('Query failed. ' . mysql_error()); 

    $row=mysql_fetch_array($result); 
    $admin=$row['username']; 
    // print $admin; 
    if (mysql_num_rows($result) == 1) { 

     $_SESSION['db_is_logged_in'] = true; 

     $_SESSION['admin']=$admin; 

     header('Location: main.php'); 
     exit; 
    } else { 
     $errorMessage = 'Sorry, wrong user id/password'; 
    } 

} 
?> 
+1

le wild'require_once ("db_fns.php");'가 나타납니다 o_o – HamZa

+0

이 코드는 SQL 인젝션에 배타적입니다 http://stackoverflow.com/questions/60174/how-to- prevent-sql-injection-in-php – Belinda

+0

당신은 쿼리에 매개 변수화를 할 수 있습니다. 아주 명확합니다. 감사합니다. – imran001

관련 문제