تالار گفتمان nCIS.ir

نسخه‌ی کامل: کاربرد hidden input
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام و خسته نباشید
دوستان کاربرد فیلد های مخفی بجز برای جلوگیری از csrf در فرم ها چی هست؟
لطفا مثال هم بزنید
ممنون
بطور خلاصه، باید یک مقدار تصادفی تولید کنید و توی سشن سمت سرور ذخیره کنید. همون مقدار رو هم داخل فرم بگذارین (این مقدار در هربار نمایش فرم باید تغییر کنه). حالا در صفحه مقصد فرم، مقداری که توسط فرم بصورت مخفی ارسال شده رو با مقدار مخفی که خودتون توی سشن دارین چک کنید و اگه برابر بود، فرم رو پردازش کنین.
مثال:
<?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
}
ممنون
اما آیا جز کاربرد امنیتی کاربرد دیگه هم داره (بالا گفته بودم بجز csrf)
کاربردهای دیگه هم میشه درنظر گرفت. برای مثال توی صفحه مقصد فرم وقتی صفحه Refresh میشه فرم دوباره پردازش میشه. میتونین برای جلوگیری از این مشکل، توی فرم یک کلید مخفی بگذارین با مقدار تصادفی و توی سشن هم ذخیره کنین. موقع پردازش فرم اول مقدار ارسالی ازطریق فرم رو با مقدار داخل سشن چک کنید و اگه برابر بودن، فرم رو پردازش کنید و مقدار داخل سشن رو هم دوباره با یه مقدار تصادفی دیگه تنظیم کنید. اینطوری اگه صفحه مقصد فرم Refresh بشه، کلیدی که توی سشن هست دیگه با مقداری که ازطریق فرم سابمیت میشه یکسان نیست و فرم پردازش نمیشه.