Drupal (7.17) Web サイトがロード バランサーの背後にある場合、実際のユーザー IPを取得するための回避策はありますか? ロードバランサーのIPアドレスが常に返されます。
質問する
3112 次
3 に答える
1
ヘッダーが必要ですが、途中のプロキシを表す複数の IP アドレスを含めることができるX-Forwarded-For
ため、素朴なアプローチは間違っています。X-Forwarded-For
実際に必要なものは次のとおりです ( Ideone ):
<?php
// Don't use this function directly to parse arbitrary headers, since it
// assumes that the headers you're passing in are associated with the
// current $_SERVER variable.
function get_client($headers) {
if (isset($headers['HTTP_X_FORWARDED_FOR'])) {
return explode(', ', $headers['HTTP_X_FORWARDED_FOR'])[0];
}
else {
return $_SERVER['REMOTE_ADDR'];
}
}
// You'd want to do this on a server, but not on ideone:
// $headers = getallheaders();
$headers = array('HTTP_X_FORWARDED_FOR' => 'client, proxy1, proxy2');
echo "Client 1: " . get_client($headers) . "\n";
$headers = array('HTTP_X_FORWARDED_FOR' => 'client');
echo "Client 2: " . get_client($headers) . "\n";
// $_SERVER['REMOTE_ADDR'] is blank on ideone but works on servers:
$headers = array();
echo "Client 3: " . get_client($headers) . "\n";
?>
またX-Forwarded-For
、簡単にスプーフィングされる可能性があるため、セキュリティ コンテキストだけに依存するべきではないことに注意してください。禁止リストなどの正しいアプローチには、$_SERVER['REMOTE_ADDR'];
.
于 2013-05-18T13:18:21.587 に答える