php
  • mysql
  • 2016-03-19 20 views 0 likes 
    0

    私はこの声明が注射のために脆弱だと信じていますが、わかりません。は私のMYSQL注入ステートメントが脆弱ですか?

    この点に関するお手伝いはありますか?

    ありがとうございました。

    function CheckUserLogin($userName,$password) 
    { 
        $sql="SELECT user_id 
         FROM users 
         WHERE user_name='".addslashes($userName)."' AND password ='".addslashes($password)."'";  
        $this->query($sql); 
        if($this->movenext()>0) 
        { 
         return $this->col['user_id']; 
        } 
        else 
        { 
         return false; 
        } 
    } 
    

    クエリ機能は、これはdocs on addslashesが言うことで、このような

    function query($_query){ 
        list($usec, $sec) = explode(" ",microtime()); 
        $time_start = ((float)$usec + (float)$sec); 
    
    
        $this->query = $_query; 
        $this->result = @mysql_query($_query, $this->link_id) or die("<b>error in sql query</b><br><pre>".$_query."</pre>.mysql error : <b>".mysql_error($this->link_id)."</b><p>"); 
    
        list($usec, $sec) = explode(" ",microtime()); 
        $time_end = ((float)$usec + (float)$sec); 
        $time = $time_end - $time_start; 
    } 
    

    答えて

    1

    のとおりです。

    は、データベース・パラメータ・エスケープ用addslashes()の使用は上のセキュリティ問題の原因となることができますので、予めご了承くださいほとんどのデータベース。

    同じ記事があります

    データベースパラメータをエスケープするために、(例えばmysqli_real_escape_string() MySQLやpg_escape_literal()、PostgreSQLのpg_escape_string()用)はセキュリティ上の理由のために使用されるべき特定のエスケープ機能をDBMS。

    ただし、SQL文でパラメータを使用する最も良い方法は、prepared statementsを使用することです。そこでは、パラメータ値は決してSQL文に注入されないので、悪意のある注射も不可能です。代わりに、データベースエンジンは、パラメータ値を直接(およびリテラルとして)使用して、すでにコンパイルされたクエリを実行します。

    How can I prevent SQL injection in PHPをお読みください:この件に関する情報はたくさんあります。

    +0

    応答に感謝ありがとうございました。 –

    0
    関連する問題