문제

<?php
class test_class {

        public function __construct() { 

        }
        public function doLogin($username,$password) {

            include("connection.php");

            $query = "SELECT *
                      FROM users
                      WHERE username = '".mysql_escape_string($username)."'
                      AND password = '".mysql_escape_string($password)."'";
            $result = mysql_fetch_array(mysql_query($query));
            if(!$result) {

            return 'no';
            }
            else 
                {
            return 'yes';
                }
            }


}
?>

위의 코드는 작동하지만 안전한 지 여부는 약간 걱정됩니다.

참고 : Post Method를 사용하지 않으므로 기능의 인수로 받아야하며 사용할 수 없습니다.

if (isset($_POST['username']) && isset($_POST['password']))
        {
        $username= $_POST['username'];
        $password= $_POST['password'];
도움이 되었습니까?

해결책

코드는 안전 할 수 있지만 구현은 크지 않습니다. 인증 암호를 일반 텍스트로 저장해서는 안됩니다. 당신은 소금과 해시를해야합니다.

이유를 설명하는 데 한 시간을 보낼 수는 있지만 더 잘할 것입니다. 이것을 읽는 것입니다.

다른 팁

쿼리 자체는 안전하게 보이지만 PDO 또는 Zend_DB와 같은 매개 변수 바인딩을 지원하는 DB 인터페이스를 사용하면 모든 SQL 문을 매우 긴장 할 필요가 없습니다.

또한, MySQL-* 함수는 거의 더 이상 사용되지 않습니다. 대신 mysqli-* 함수를 살펴 봐야합니다.

문체 부수적 참고로, 빈 생성자에는 아무런 의미가 없으며 문자열 값보다는 부울을 반환하는 것이 좋습니다.

마지막으로, 다른 곳에서 언급했듯이 일반 텍스트 암호를 저장하는 것은 나쁜 생각입니다.

어 .... 일반 텍스트 비밀번호를 저장하고 있습니까? 그것은 확실히 안전하지 않습니다. SHA256과 같은 것을 사용하여 비밀번호를 소금으로 해시해야합니다. 일반 텍스트 암호를 저장하는 것은 결코 좋은 생각이 아닙니다.

아니요. 데이터베이스에 원시 비밀번호를 저장해서는 안됩니다. 해시 (바람직하게는 소금으로) 보관하십시오. 또한, 준비된 진술은 탈출하는 것보다 더 나은 선택입니다. 이것 좀 봐 PHP PDO 문서. 추가 혜택 (보안 외에)으로 더 효율적일 수 있습니다.

코드 자체는 괜찮아 보이지만 제가 보는 주요 문제는 비밀번호를 일반 텍스트로 전달한다는 것입니다.

클라이언트-서버 연결 보안 (즉, SSL 사용)은 서버-다이버스 연결 보안입니다.

두 경우 모두 누군가가 전선에 앉아 트래픽을 볼 수 있다면 보안 문제가 발생합니다.

그것이 나라면, 나는 클라이언트와 서버 사이에 SSL 연결이 확실히있을 것입니다.

데이터베이스에 암호 해시를 저장하고 있는지 확인하겠습니다.

그리고 나는 당신의 코드를 같은 것으로 변경합니다

//Pseduo Code
SELECT * FROM Table where UserName = $username
Get Row Back
if(MD5Hash($password) == DataRow[Password])
   //Valid

그러나 보안이 걱정된다면 "사용자 이름"의 비밀번호를 변수에 저장하고 쿼리 외부에서 비교할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top