복붙노트

[SQL] SQL 주입으로부터 보호

SQL

SQL 주입으로부터 보호

나는 웹 사이트를 개발 그리고 난 연결 부분을 확보하기 위해 노력하고있어.

나는 addslashes는 SQL 주입을 중지 $ 로그인에 기능을 사용하지만 일부 친구들은 충분한 보안이 아니라 그 나에게 말했다. 그러나, 그들은 어떻게이 취약점을 악용하는 저를 보이지 않았다.

어떻게 / 당신이 암호를 해독 할 수 수 있습니까? 어떻게 고정 할 수 있습니까?

<?php

    if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) )
    {
        extract($_POST);
        $sql = "SELECT pseudo, sex, city, pwd FROM auth WHERE pseudo = '".addslashes($login)."'";
        $req = mysql_query($sql) or die('Erreur SQL');
        if (mysql_num_rows($req) > 0)
        {
            $data = mysql_fetch_assoc($req);
            if ($password == $data['pwd'])
            {
                $loginOK = true;
            }
        }
    }
    ?>

해결법

  1. ==============================

    1.당신은 쿼리 문자열 입력 매개 변수를 이스케이프는 mysql_real_escape_string를 사용해야합니다. 살균 숫자 매개 변수에 캐스팅하고 위생적으로 식별자에 화이트리스트를 사용하여 유형입니다.

    당신은 쿼리 문자열 입력 매개 변수를 이스케이프는 mysql_real_escape_string를 사용해야합니다. 살균 숫자 매개 변수에 캐스팅하고 위생적으로 식별자에 화이트리스트를 사용하여 유형입니다.

    참조 PHP 페이지에서 로그인 형태 SQL 인젝션의 일례가있다.

    더 나은 솔루션이 준비된 문을 사용하는 것입니다, 당신은 PDO 또는 mysqli를 사용하여이 작업을 수행 할 수 있습니다.

  2. ==============================

    2.당신은 일반 텍스트로 암호를 저장하는! 그게 내가 하나를 보았다면 적 주요 보안 문제입니다. 그것에 대해 무엇을 할 수 있습니다 : 예를 들어 볼 때 적어도, 암호의 (사용자 별) 소금에 절인 해시를 사용 여기.

    당신은 일반 텍스트로 암호를 저장하는! 그게 내가 하나를 보았다면 적 주요 보안 문제입니다. 그것에 대해 무엇을 할 수 있습니다 : 예를 들어 볼 때 적어도, 암호의 (사용자 별) 소금에 절인 해시를 사용 여기.

  3. ==============================

    3.사용하다:

    사용하다:

    mysql_real_escape_string($inputToClean);
    
  4. ==============================

    4.또 다른 입을 딱 벌리고있는 보안 구멍이있다 - 추출물. 이 전역 변수를 덮어 쓰게됩니다 것은, 몇 문자를 입력에서 당신을 저장하지만, 언급에 너무 많은 구멍을 열어 수 있습니다.

    또 다른 입을 딱 벌리고있는 보안 구멍이있다 - 추출물. 이 전역 변수를 덮어 쓰게됩니다 것은, 몇 문자를 입력에서 당신을 저장하지만, 언급에 너무 많은 구멍을 열어 수 있습니다.

    나는이 게시하면 어떻게됩니까?

    $_POST {
        'login' => 'Admin',
        'loginOK' => 1
    }
    

    , $ loginOK는 == 이제 1이고, 내가 관리자로 로그인 할 수 있습니다 무엇을 추측.

    슬픔의 자신을 저장을 많이 후, 그냥 대신 추출물 무서운 해킹에 의존, 사용하려는 변수를 사용합니다.

  5. ==============================

    5.그렇다 addslashes ()이이 코드에서 발견 된 어떤 임의의 문제입니다의 사용에서 :

    그렇다 addslashes ()이이 코드에서 발견 된 어떤 임의의 문제입니다의 사용에서 :

  6. ==============================

    6.오히려 addslashes보다 당신이 mysql_real_escape_string를 사용해야합니다.

    오히려 addslashes보다 당신이 mysql_real_escape_string를 사용해야합니다.

  7. from https://stackoverflow.com/questions/4749588/protect-against-sql-injection by cc-by-sa and MIT license