2011-09-07 6 views
-3

PHP로 코드를 만들었지 만 작동하지 않습니다. 때로는 코드가 작동하지만 대부분의 경우에는 그렇지 않습니다. 문제는 변화하는 암호가 유효한지 여부를 표시 또는 내가 잊어 버린 친구 ... 이젠이지만 내 문제는 심지어 내가 유효한 사용자 이름을 입력하고 나에게비밀번호 확인

if(isset($_POST['submit'])) 
{ 
$con = mysql_connect("localhost","root",""); 
$db = mysql_select_db("billmailid", $con); 
     if (!$con) 
      { 
     die('Could not connect: ' . mysql_error()); 
      } 
$username=$_POST['usernameid']; 
$password=$_POST['passwordid']; 

$result = mysql_query("SELECT * FROM login"); 


$check = mysql_query("SELECT username FROM login WHERE username = '$username' && password= '$password'") ; 

$check2 = mysql_num_rows($check); 

if($check2==1) 
    { 
    echo "valid"; 
    } 
else 
    { 
    echo "invalid"; 
    } 
} 
?> 
+2

제목이 아닌 본문에 질문을 적어주십시오. 정확히 작동하지 않는 것은 무엇입니까? 그러나 귀하의 코드를 읽고 나는 OR 연산자 (||)를 사용하는 것이 실제로 원하는 것이 아니라고 말할 수 있습니다 - AND 연산자를 대신 사용하십시오. [논리 연산자에 대한 읽기] (http://dev.mysql.com/doc/refman/5.0/en/logical-operators.html). –

+2

SQL 인젝션 조심해! http://xkcd.com/327/ – piddl0r

+0

XKCD - SQL 주입 코멘트 가이 만화 없이는 동일하지 않습니다 :) – SimSimY

답변

3

글쎄, 우선 질문 제목과 본문을 다시 쓰고 예제와 오류를 추가하고 일반적으로 읽을 수있게 만드는 것이 좋습니다. SQL ||에서

둘째 OR하고 &&AND입니다. 아마 거기에서 시작해야합니다.

셋째 - 당신은 정말 SQL 주입에 대해 읽어야합니다. 그리고 저는 XKCD 만화를 의미하지는 않습니다. 당신은 더 나은 사용자 빈 루트 암호를 사용하지하고 도전적으로 "루트"를 사용하지 - 당신은 어떻게 메이크업 명확하고 안전한 모두 데이터베이스에 대한 쿼리 및 사용자가

넷째에 대한 몇 가지 예와 지침을 찾을 수있는 following link에서 웹 사이트 사용자.

저장 코드를 작성하는 것은 때때로 고통스럽기는하지만, 더 자연스럽게 시작할수록 더 빨리 시작됩니다. 또한 응용 프로그램의 보안을 "만들기"는 안전하게 구축하는 것보다 훨씬 어렵습니다.

enter image description here

+0

그 절대적으로 천재 만화 +1 – DaveRandom

+0

+1에 대한 참조 xkcd –

0

기타 SQL 주입에 취약한 몇 가지가 있습니다.

당신은 불필요한 mysql 쿼리가 있습니다. $result은 mysql 쿼리이지만 사용되지는 않습니다. 검사에 대한

귀하의 질의가 ||를 사용 OR&& 또는 AND을해야이 로그인은 결과를 다시 가져 오는 두 값 중 하나와 일치하는 것을 의미한다. 이로 인해 몇 가지 문제가 발생합니다.

요청은 두 값 중 하나와 일치해야합니다. 따라서 쌍을 지정하지 않아도 올바른 사용자 이름이나 비밀번호가 반환되면 결과 행이 반환됩니다. 또는 두 개의 로그인에 동일한 암호가 있으면 두 행을 되 찾을 수 있습니다. 이는 if($check==1) 문이 실패 함을 의미합니다.

관련 문제