2012-03-22 8 views
1

私はIPアドレスである変数を持っています。 Access 2010データベースにテキストとして保存されます。私はipSrcでこのクエリを実行しようとしており、クエリは常に失敗します。私の推測では、実際のIPアドレスではなくipSrcとしてipSrcを見ているということです。私は 'ipSrc'で試してみましたが、普通のipSrcと両方のリターンは失敗します。 "" ipSrc ""も試みましたが、失敗しました。これは失敗しました。 '& ipSrc'。ここにその声明があります。変数をSQLに渡す

SQLCHAR* query = (SQLCHAR*)"SELECT tblIP.[IPAddress], tblIP.[IPType], tblIP.[IPStatus], tblIP.[IPMax] FROM tblIP WHERE tblIP.[IPAddress]= ipSrc AND tblIP.[IPType]=3 AND tblIP.[IPStatus]=1 AND tblIP.[IPMax]=0;"; 

ここではipSrcの定義があります。

translate_ip(ip_header->source_ip, ipSrc); 

printfを使用すると、実際のIPアドレスとして出力されます。コードはipSrcが特別に扱われるべきであることを、あなたがそこに持っているものから、知るために方法はありません

printf("\n Source  IP: %s", ipSrc); 

答えて

4

、それだけで-あるとして、それを通過するだろう。

おそらく、C++文字列として動的にクエリ文字列を作成し、それを使用してクエリを生成することができます。次のようなもの:

std::string strqry = 
     "SELECT tblIP.[IPAddress], " 
    + "  tblIP.[IPType], " 
    + "  tblIP.[IPStatus], " 
    + "  tblIP.[IPMax] " 
    + "FROM tblIP " 
    + "WHERE tblIP.[IPAddress] = '" + ipSrc + "' " 
    + "AND  tblIP.[IPType] = 3 " 
    + "AND  tblIP.[IPStatus] = 1 " 
    + "AND  tblIP.[IPMax] = 0" 
    + ";"; 

SQLCHAR *query = (SQLCHAR *)(strqry.c_str()); 

// Now use query 

ipSrcの値を制御できることを確認してください。それ以外の場合は、SQLインジェクション攻撃の対象となります(その場合は、prepared/parameterised文を使用することになります)。