0

私が質問しているソフトウェアは控えめに言っても時代遅れであることは理解していますが、それはこの実験に課せられた制約によるものです。これは宿題ではなく、複数のオペレーティング システムと構成で SQL インジェクションをテストするための単なる実験です。

Windows Server 2003 マシン上に MS SQL サーバーをセットアップする方法を探していますが、なかなかうまくいきません。最終的にすべての設定が完了し、ローカル ホストで phpinfo() を正常に実行できますが、htm ファイルを介してユーザー名とパスワードを送信した後にクエリを実行すると、次のエラーが発生します。

Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -49 [code] => -49 [2] => This extension requires the Microsoft SQL Server 2012 Native Client. Access the following URL to download the Microsoft SQL Server 2012 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712 [message] => This extension requires the Microsoft SQL Server 2012 Native Client. Access the following URL to download the Microsoft SQL Server 2012 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712 ) [1] => Array ( [0] => IM002 [SQLSTATE] => IM002 [1] => 0 [code] => 0 [2] => [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified [message] => [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified ) )

2012 は 2003 と互換性がないため、Microsoft SQL Server 2008 Native Client をインストールしました。試してみましたが、インストール中にエラーが発生するだけです。誰かが私が見落としているかもしれない解決策や何かを持っていれば、それは完璧です.

追加の洞察については、実行されている私のphpファイルを次に示します。コメントに注意してください。以前は MySQL php スクリプトでした。

<?php

echo "<center> <img src=\"bookstore.jpg\"><br /> "; 
echo "<font color=green size=6> Database Query Results </font>";
$Id = $_POST["Id"];
$pass =  $_POST["pass"];
#$name = mysql_real_escape_string($_POST["fname"]);
#$age = mysql_real_escape_string($_POST["age"]);
$db_host = '.\SQLExpress';
$db_user = 'SCADATEST';
$db_pwd = '';
$database = 'bookorders';
$table = 'Customers';
// Connect to the database server
//$con = mssql_connect('localhost', 'SCADATEST', '');
//$connectionInfo = array("UID" => $db_user, "PWD" => $db_pwd, "Database"=>$database);
//$connection = mssql_connect('localhost', 'SCADATEST', '');
//$con = sqlsrv_connect($db_host, $connectionInfo);
//if (!$con)
//  {
//#  die('Could not connect: ' . $age . '   '.mysql_error());
//  die('Could not connect: ' . '   ' . print_r(sqlsrv_errors(), true));
//  }

$connectionInfo = array( "Database"=>"$database");
$conn = sqlsrv_connect( $db_host, $connectionInfo);

if( $conn ) {
     echo "Connection established.<br />";
}else{
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}


// Open to the database
//mysql_select_db("bookorders") or die(mysql_error());

//Create query string
$QueryStr = 'SELECT * FROM Customers where Username=\'' . $Id . '\' and Pwd=\'' . $pass . '\';'; 
#$QueryStr = 'SELECT * FROM Customers; SELECT * FROM Orders; -- and Pwd='; 

//$QueryStr= "SELECT * FROM Customers where Username='' OR 1=1; -- ' and Pwd='fsd';"

//echo $QueryStr ;
//echo "<br />";

$queries = preg_split("/;+(?=([^'|^\\\']*['|\\\'][^'\^\\\']*['|\\\'])*[^'\^\\\']*[^'|^\\\']$)/",$QueryStr);
#$queries = split('[/;]',$QueryStr);

// Select all records from the "Individual" table
foreach ($queries as $query){
    if (strlen(trim($query)) > 0){ 
                $result = sqlsrv_query($conn,$query) or die(mysql_error());
        echo "<HR><P><table border=2><tr>";
                //first print the column names as headers
        for ($i=0; $i < sqlsrv_num_fields($result); $i++){
                    $field_info = mysql_fetch_field($result, $i);
            echo "<th>{$field_info->name}</th>";
        } 
            echo "</tr>";
             // Loop thru each record (using the PHP $row variable),

         while($row = sqlsrv_fetch_array($result)){

                //now print the data                
        $c=0;
        echo "<tr>";
        while ($c < sqlsrv_num_fields($result)){
            echo "<td>{$row[$c]}</td>";
                        $c++;
               } //end of inner while
                 echo "</tr>";
             }//end of outer while
         echo "</table> <P> <HR>";
     } //end of if

echo "<br /><br /> ";
} //end of for each
echo "<a href=\"index.html\"> Return to Home </a> ";
echo "<hr><font color=red size=1> Copyright 2013. Guillermo Francia, III-Jacksonville State <hr></center>";

sqlsrv_close($con);

?>

これを機能させるために誰かが持つかもしれない助けは素晴らしいでしょう。

4

2 に答える 2

0

古い mssql api を試すか、単純な odbc を使用することができます。sqqlsrv() は 2003 年には存在しませんでした。PHP はどの拡張機能を使用していますか? 2012 ネイティブ クライアントが必要な場合は、VC9 .dll が疑われます。VC6にダウングレードしてみてください

--編集マニュアルを確認しました。Win Server 2008SP2 より下では sqlsrv を使用できません。古い拡張機能 (mssql または単純な古い odbc) のいずれかを使用する必要があります。PHP のダウングレード が必要になる場合があります。 ODBC 用に Windows DSN を作成します: コントロール パネル -> データ ソース (しばらく時間がかかったと思います) 頑張ってください!

于 2013-11-04T21:53:40.967 に答える
0

別の方法として、PHP で FreeTDS ドライバー (php_dblib.dll) を使用することもできます。Moodleには、セットアップ方法がよく書かれたドキュメントがあります。

于 2013-11-04T22:08:36.367 に答える