1

サイトの商品ページに在庫チェッカーを作成しました。これは AJAX 送信ボタンで構成されており、クリックすると、次の curl 関数を使用して製品の在庫を取得します。

function inventory($sku) {
  $url = 'http://www.example.com/product/' . $sku;
  $curl = curl_init($url);
  $referer = 'http://www.google.com/search';
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($curl, CURLOPT_COOKIEFILE, '/cookie.txt'); 
  curl_setopt($curl, CURLOPT_REFERER, $referer);
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
  curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10');
  $html = curl_exec($curl);
  curl_close($curl);
...
}

接続先の URL は、在庫ページにアクセスするためにログインする必要があるサプライヤーのサイトです。これらのページには、http 経由でのみアクセスできます。サプライヤーのサイトから送信された Cookie をコピーし、有効期限を 0 に設定しました。Cookie には ASP.NET SessionId が含まれています。

Cookie を保護する方法はありますか? そうでない場合、誰かが Cookie を乗っ取って、私のログイン情報からサプライヤーのサイトにアクセスするのはどれほど簡単なことでしょうか。私の理解では、中間者攻撃は、私のサーバーとサプライヤーのサーバーの間の誰かから発生する必要があります。これは正しいです?

4

3 に答える 3

0

HTTPSではなくHTTP経由で在庫サプライヤーにアクセスするということですか?

もしそうなら、とにかくあなたがクッキーでできることは何もありません。なぜなら、通信全体が安全ではなく、自由に盗聴または傍受される可能性があるからです-これを恐れるなら、助けはありません。

一方、Cookie自体は通常サーバーによって設定され、2つのオプションが利用可能です:1)httponly 2)セキュア。

1)httponlyは、このCookieをJavascriptで使用可能にしないようにブラウザに指示しますが、有効期限が切れるまで、次のリクエストでのみHTTP経由で送り返します。

2)secureは、暗号化されていない通信を介してCookieを送信しないようにブラウザに指示します。つまり、HTTPではなくHTTPSを介してのみ送信します。

あなたのカールはブラウザです。あなたのcurlにはjavascriptがないので、最初のオプションは役に立ちません。そしてそれでも、あなたのカールはどのクッキーを設定すべきかを知っている必要があり、そしてそれを知っているでしょう、そしてあなたはサーバーがそれをJavascriptで利用可能にしたくないことを簡単に無視することができます。

あなたのカールはまた、あなたがそうするようにプログラムした場合にのみクッキーを送り返します。安全でないチャネルを使用することをお勧めする場合は、安全フラグを使用してもそれを防ぐことはできませんが、Cookie自体にセキュリティを追加することはできません。

Cookieの値は、通信の両側で常に暗号化されていません。スニッフィングに対する唯一のセキュリティは、HTTPSを使用して追加されます。クッキーオプションに関する他のことは、ブラウザの動作を保護し、クッキーを知らないはずの第三者にクッキーが知られるリスクを減らすためだけにあります。

Cookieを返送する場合、追加できるオプションはありません。

于 2012-10-04T21:45:31.707 に答える
0

最初のステップではhttps://、ajax 呼び出しに使用します。サプライヤのサーバーにカスタム暗号化を解読できるコードがない限り (たとえば、JSON で Cookie 配列をエンコードし、mcrypt で暗号化してから、サプライヤのサイトで解読して再構築するとします)。サプライヤー側の RESTful API。SSL を必要としない場合は、一種の SOL です。

于 2012-10-04T19:26:31.697 に答える
0

HTTP トラフィックを保護する最も簡単な方法は、HTTPS を使用することです。全体を SSL でラップすることにより、リクエストを復号化せずに見える唯一のものは、リクエストのドメイン名です。

HTTP 経由でのアクセスのみを許可している場合は、SSL 証明書への投資について話し合う必要があります。そのため、ほとんどのブラウザは、トラフィックがまだ暗号化されていても、安全ではないことに不満を抱くでしょう)。サプライヤが HTTP のみを提供しているため、特にあらゆる種類のセッション ID が関係している場合、攻撃にさらされています。

于 2012-10-04T19:27:54.497 に答える