01-06-1395، 10:25 ق.ظ
02-06-1395، 08:36 ق.ظ
بطور خلاصه، باید یک مقدار تصادفی تولید کنید و توی سشن سمت سرور ذخیره کنید. همون مقدار رو هم داخل فرم بگذارین (این مقدار در هربار نمایش فرم باید تغییر کنه). حالا در صفحه مقصد فرم، مقداری که توسط فرم بصورت مخفی ارسال شده رو با مقدار مخفی که خودتون توی سشن دارین چک کنید و اگه برابر بود، فرم رو پردازش کنین.
02-06-1395، 08:41 ق.ظ
مثال:
توی صفحه مقصد هم اینطوری چک میکنید:
<?php session_start(); $token = md5(time() . 'private_key' . uniqid()); $_SESSION['token'] = $token; ?> <form action="result.php" method="post"> <input name="CSRF_TOKEN" type="hidden" value="<?= $token ?>" /> ... </form>
توی صفحه مقصد هم اینطوری چک میکنید:
<?php session_start(); if(isset($_POST['CSRF_TOKEN']) && $_POST['CSRF_TOKEN'] === $_SESSION['token']) { // process form here }
02-06-1395، 06:03 ب.ظ
ممنون
اما آیا جز کاربرد امنیتی کاربرد دیگه هم داره (بالا گفته بودم بجز csrf)
اما آیا جز کاربرد امنیتی کاربرد دیگه هم داره (بالا گفته بودم بجز csrf)
03-06-1395، 08:32 ق.ظ
کاربردهای دیگه هم میشه درنظر گرفت. برای مثال توی صفحه مقصد فرم وقتی صفحه Refresh میشه فرم دوباره پردازش میشه. میتونین برای جلوگیری از این مشکل، توی فرم یک کلید مخفی بگذارین با مقدار تصادفی و توی سشن هم ذخیره کنین. موقع پردازش فرم اول مقدار ارسالی ازطریق فرم رو با مقدار داخل سشن چک کنید و اگه برابر بودن، فرم رو پردازش کنید و مقدار داخل سشن رو هم دوباره با یه مقدار تصادفی دیگه تنظیم کنید. اینطوری اگه صفحه مقصد فرم Refresh بشه، کلیدی که توی سشن هست دیگه با مقداری که ازطریق فرم سابمیت میشه یکسان نیست و فرم پردازش نمیشه.