পিএইচপি-তে রেফারার নির্ধারণ করা


102

বর্তমান পৃষ্ঠাটি কোন পৃষ্ঠাটি প্রেরণ করা হয়েছে বা ডাকা হয়েছে (এজেএক্সের মাধ্যমে), তা নির্ধারণের সবচেয়ে নির্ভরযোগ্য এবং সুরক্ষিত উপায় কী। $_SERVER['HTTP_REFERER']নির্ভরযোগ্যতার (অভাবের) কারণে আমি এটি ব্যবহার করতে চাই না এবং কেবলমাত্র আমার সাইটে উত্সাহিত অনুরোধগুলি থেকে পৃষ্ঠাগুলি কল করার প্রয়োজন রয়েছে।

সম্পাদনা: আমি যাচাই করতে দেখছি যে কোনও স্ক্রিপ্ট যা ক্রিয়াকলাপের ধারাবাহিকতা দেয় আমার ওয়েবসাইটের একটি পৃষ্ঠা থেকে ডাকা হচ্ছে called


5
আপনি কেন বলেছেন যে _S _SERVER ['HTTP_REFERER'] নির্ভরযোগ্য নয়?
মিলান বাবুস্কভ

9
পিএইচপি বাস্তবায়ন নির্ভরযোগ্য। সমস্যাটি হ'ল ব্রাউজার কখনই এটি প্রেরণ করে না এবং আপনি যদি চান তবে এটি পরিবর্তন করতে পারেন। সুতরাং এটি নির্ভরযোগ্য নয় যা ক্লায়েন্টের পক্ষ থেকে সঠিক।
বিরি

2
একটি সম্ভাব্য উপায় হ'ল আপনার পৃষ্ঠার একটি ক্ষেত্রে একটি অনন্য কী (উদাহরণস্বরূপ একটি জিইউইডি) স্থাপন করা এবং পরবর্তী অনুরোধে এটি আবার প্রেরণ করা।
ফিলিহো

সার্ভারের আইপি ঠিকানা এবং ব্যবহার সন্ধান করুন $_SERVER[REMOTE_ADDR]

উত্তর:


93

রেফারটি এইচটিটিপি প্রোটোকলের অংশ হিসাবে ক্লায়েন্টের ব্রাউজার দ্বারা প্রেরণ করা হয়েছিল এবং তাই এটি সত্যই অবিশ্বাস্য is এটি সেখানে নাও থাকতে পারে, এটি জাল হতে পারে, এটি সুরক্ষার কারণে যদি আপনি এটি বিশ্বাস করতে পারেন না।

আপনার সাইট থেকে কোনও অনুরোধ আসছে কিনা তা যদি আপনি যাচাই করতে চান তবে ভাল আপনি পারবেন না তবে আপনি ব্যবহারকারীকে আপনার সাইটে এবং / অথবা সত্যায়িত হয়েছে তা যাচাই করতে পারবেন। কুকিজ AJAX অনুরোধে প্রেরণ করা হয় যাতে আপনি তার উপর নির্ভর করতে পারেন।


5
আপনি যদি এই পদ্ধতিটি ব্যবহার করতে চান তবে সিএসআরএফ এন.ইউইকিপিডিয়া.আর.উইকি
জেডি আইজ্যাকস

17
আদর্শভাবে আপনার সিএসআরএফ আক্রমণ রোধ করতে প্রতি ব্যবহারকারী প্রতি সেশন প্রতি অনন্য টোকেন ব্যবহার করা উচিত (যদি অনুরোধ অনুসারে আপনি ভীতু হয়ে থাকেন)। রেফারারটি পরীক্ষা করা নিখুঁতভাবে সুরক্ষা এবং একেবারে বাস্তব সমাধান নয়।
সেলডেক

3
@ সেলডেক না, রেফারার চেক করা 'অবজ্ঞা দ্বারা সুরক্ষা' নয়। কোনো আক্রমণকারী একটি CSRF আক্রমণ Referer নিহতের ব্রাউজার দ্বারা প্রেরিত নিয়ন্ত্রণ করতে পারে না সঞ্চালন বের করার চেষ্টা, তাই চেক এটা করে CSRF বিরুদ্ধে রক্ষা করুন। তবে, আমি আপনার সিদ্ধান্তে দাঁড়াব যে পরিবর্তে আপনার সিএসআরএফ টোকেন ব্যবহার করা উচিত, কারণ রেফারার-চেক করার পদ্ধতির অসুবিধাগুলি রয়েছে যদি আপনাকে আপনার সাইটে একটি উন্মুক্ত পুনঃনির্দেশ দেওয়া থাকে এবং ব্যবহারকারী এজেন্টদের জন্য বিরতি দেওয়া হয় যা রেফারটিকে সরিয়ে দেয়।
মার্ক আমেরিকা

@ মারক্যামেরি এটি সর্বোপরি নির্ভর করে আপনি অবশ্যই প্রতিরোধের জন্য যা চেষ্টা করছেন, তবে ক্লায়েন্ট-নির্দিষ্ট এইচডিপি শিরোনামগুলি সামগ্রিকভাবে খুব শক্তিশালী সুরক্ষা মডেল নয়।
সেলদেক

23

আমি যেটি সবচেয়ে ভাল পেয়েছি তা হ'ল একটি সিএসআরএফ টোকেন এবং সেই লিঙ্কগুলির জন্য সেশনটিতে এটি সংরক্ষণ করুন যেখানে আপনাকে রেফারার যাচাই করতে হবে।

সুতরাং আপনি যদি কোনও এফবি কলব্যাক জেনারেট করে থাকেন তবে এটির মতো দেখতে কিছুটা লাগবে:

$token = uniqid(mt_rand(), TRUE);
$_SESSION['token'] = $token;
$url = "http://example.com/index.php?token={$token}";

তারপরে সূচি.এফপি দেখতে পাবেন:

if(empty($_GET['token']) || $_GET['token'] !== $_SESSION['token'])
{
    show_404();
} 

//Continue with the rest of code

আমি সুরক্ষিত সাইটগুলি জানি যা তাদের সমস্ত সুরক্ষিত পৃষ্ঠাগুলির জন্য এর সমতুল্য করে।


1
: এখানে টোকেন CSRF সম্পর্কে আরো জানার জন্য একটি লিঙ্ক en.wikipedia.org/wiki/Cross-site_request_forgery
We0

7
আপনি কি নিশ্চিত যে এটি $_GET['token'] == $_SESSION['token']এবং না $_GET['token'] !== $_SESSION['token']?
টিমো হুভিনেন

17

ব্যবহার , $ _SERVER [ 'HTTP_REFERER']

পৃষ্ঠার ঠিকানা (যদি থাকে) যা ব্যবহারকারী এজেন্টকে বর্তমান পৃষ্ঠায় উল্লেখ করেছে। এটি ব্যবহারকারী এজেন্ট দ্বারা সেট করা হয়েছে। সমস্ত ব্যবহারকারীর এজেন্টরা এটি সেট করবে না এবং কিছু HTTP_REFERER কে বৈশিষ্ট্য হিসাবে সংশোধন করার ক্ষমতা সরবরাহ করে। সংক্ষেপে, এটি সত্যিই বিশ্বাস করা যায় না।

if (!empty($_SERVER['HTTP_REFERER'])) {
    header("Location: " . $_SERVER['HTTP_REFERER']);
} else {
    header("Location: index.php");
}
exit;

0

এটি পরীক্ষা করার কোনও নির্ভরযোগ্য উপায় নেই। এটি কোথা থেকে এসেছে তা আপনাকে জানাতে সত্যই এটি ক্লায়েন্টের হাতে। আপনি কেবল আপনার ওয়েবসাইটের কয়েকটি পৃষ্ঠায় কুকি বা সেশন সম্পর্কিত তথ্য ব্যবহার করার কথা ভাবতে পারেন, তবে এটি করার ফলে আপনার বুকমার্কগুলির ব্যবহারকারীর অভিজ্ঞতা নষ্ট হবে।


0

সমস্ত নকল রেফারার সমস্যা পড়ার পরে আমাদের কাছে কেবলমাত্র একটি বিকল্প রয়েছে: উদাহরণস্বরূপ আমরা যে পৃষ্ঠাটি রেফার হিসাবে ট্র্যাক করতে চাইছি সেটি সেশনে রাখা উচিত, এবং এজাক্স হিসাবে বলা হয় তখন রেফার এর পৃষ্ঠা মান আছে কিনা তা সেশনে চেক করা উচিত এবং অন্যান্য পদক্ষেপ নেই কর্ম.

অন্যদিকে তিনি যখন কোনও ভিন্ন পৃষ্ঠা অনুরোধ করছেন তখন রেফারারের সেশনটির মান বাতিল করে দিন।

মনে রাখবেন যে সেশন ভেরিয়েবলটি কেবল ইচ্ছা পৃষ্ঠার অনুরোধে সেট করা থাকে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.