0

ログイン認証部分に使用する以下のコードがあります。それはすべてmysqlにあり、odbcに変換するために最善を尽くしました

私はエラーが発生します:$row = $query->odbc_assoc();私は推測している必要があります

$connection = odbc_connect("Driver={SQL Server};Server=$host;Database=$database;",$uid, $passVal ) or die("Connection could not established");

$query = $connection->'SELECT Level_access FROM users WHERE ID = "'.$connection->addslashes($_SESSION['user_id']).'"';
$row = $query->odbc_assoc();

$connection->close();

誰かがこれをチェックできますか、それは完全に間違って書かれているかもしれません..

ありがとう

4

1 に答える 1

0

質問: mysql_escape_string は、odbc 接続の addslashes と同等ですか?

いいえ、決して正しいツールでaddslashesはありません! 文字セットを簡単に操作することで、作成する単純なエスケープ層をバイパスするのは驚くほど簡単です。これにより、依然としてSQL インジェクションの危険にさらされます。さらに、MySQL 専用であり、宣言された文字セットを持つ開いている MySQL 接続でのみ正しく動作します。addslashesmysql_real_escape_string

これは、構文が完全に偽物であるという事実に触れていません。 odbc_connectオブジェクトではなく、リソースを返します。その上でメソッドを呼び出そうとしても、スクリプトを強制終了するだけです。

sqlsrv 拡張機能のような最新のものではなく、 OBDCを使用して SQL Server に接続する必要がある場合は、少なくともPDO_ODBC. これらのオプションはどちらも、SQL インジェクションに対する効果的な防御となる、パラメータ化されたクエリを使用した準備済みステートメントを提供します。Sqlsrv の準備されたステートメントは、サーバー上で実行される必要がありますが、PDO はサーバーではなく内部で実行されます。接続文字列で接続文字セットを必ず渡し、渡すすべてのユーザー データが正しい文字セットであることを確認してください。

于 2012-12-14T04:32:52.980 に答える