2011-09-21 7 views
0

나는 로그인 시스템을 만들고있다. 제 친구는 PDO를 사용하는 것이 나을 것이라고 말했습니다. 그러나, 나는 PDO를 사용하는 방법을 모른다. 나는 이미 MySQL에 익숙하다. 이외의 모든 영숫자 문자가 제거되고 있기 때문에 위의 코드는 보안 위험의 유형이겠습니까PHP mysql_query 로그인 시스템 보안

$un = preg_replace('/[^a-z]/i','',$_POST['username']); 
$pw = preg_replace('/[^a-z]/i','',$_POST['password']); 
$result = mysql_query("SELECT `username`,`password` FROM `login` where `username` = $un && `password` = $pw") or die (mysql_error()); 

: 예를 들어, 여기 내 코드의 일부이다? 그렇다면 가장 좋은 방법은 무엇입니까? (PDO 또는 원시 MySQL 사용)

답변

0

로그인을 위생적으로 처리하려면 충분하지만 사용자 이름/암호는 alpha로만 제한됩니다. 더 나은 것이 될 것입니다 /[^a-z0-9-_\s]|^\s|\s$|[^0-9a-zA-Z-_](?=\s)/i

a-z,0-9,-,-,and space입니다. 문자열의 시작 부분과 끝 부분에 공간, 오히려 ReqExp의 추측 및/또는 허용 된 문자를 제한하는 것보다 a-z,0-9,-,_

2

이외의 문자를 다음에 공백을 제거합니다, 당신은 사용할 수 있습니다 mysql_real_escape_string

$result = mysql_query("SELECT `username`,`password` 
         FROM `login` 
         WHERE `username` = '".mysql_real_escape_string($_POST['username'])."' && 
          `password` = '".mysql_real_escape_string($_POST['password'])."'") 
+0

MySQL 주입의 일부 유형을 수행하기 위해 수행 할 수있는 작업은 무엇입니까? 어떤 보안 예방 조치를 취해야합니까? –

+0

@Howard [mysql_real_escape_string] [string quoting과 함께]에서 좋은 점은 주입이 안된다는 확신을 가질 수 있다는 것입니다. – Shad