PDA

View Full Version : سوال: ایجاد کد یکبار مصرف در هر فرم و مطابقت با صحت کد در سمت سرور PHP و ثبت فرم در صورت صحیح بودن کد



hgfhjgjh
پنج شنبه 02 خرداد 1398, 19:47 عصر
سلام ببخشید عنوانم مناسب نبود
من یک فیلد hidden در یک فرم تعریف کردم و یک مقدار رندوم و تصادفی در اون قرار داده میشه با هر مرتبه رفرش شدن صفحه و یا ثبت فرم بصورت آجاکس و ...
و در سمت سرور میخوام این کد را بررسی کنم اگر صحیح بود اطلاعات ثبت بشه در غیر اینصورت پیغام خطایی نمایش داده بشه
صرفاً هدف جلوگیری از ارسال و ثبت فرم توسط ربات ها و اسپمرها هست
توجه داشته باشید که به هیچ وجه منظور من فیلد کپچا نیست و اون سر جای خودش هست

بطور معمول اون چیزی که نیاز دارم رو دیگران به این شکل انجام دادند که یک کد رندوم ایجاد میکنند و بصورت Session ذخیره میکنند و در فیلد فرم هم اون رو قرار میدهند و در سمت سرور مقدار ارسالی در فیلد مخفی رو با Session مطابقت میدن و اگر درست بود یعنی اوکی هست
حالا مشکل خیلی خیلی بزرگ این کار این هست که اگر کاربر صفحه حاوی فرم را در دو تب در مرورگرش باز کنه، مقدار Session عوض میشه و عملاً اون تب اول دیگه فرمش از کار می افته من نمیخوام این مشکل بوجود بیاد و میخواهم کاری کنم که کاربر اگر در 10 تب مختلف در مرورگر خودش 10 بار صفحه رو هم باز کرد در هر 10 صفحه فرم بدرستی ارسال و ثبت بشه و مشکلی پیش نیاد برای کاربر
لطفاً من رو راهنمایی کنید که چطور باید این کار رو بدون استفاده از Session انجام بدم؟

plague
جمعه 03 خرداد 1398, 09:50 صبح
به این میگن csrf token
اسمش رو بگو که نیاز نباشه اینهمه توضیح بدی که چیه !

جواب سئوالت هم اینه که نیاز نیست تو هر صفحه تغییرش بدی

https://stackoverflow.com/a/20057340/590589

hgfhjgjh
جمعه 03 خرداد 1398, 11:03 صبح
ممنونم بابت توضیحاتتون دوست عزیز
نمیدونستم اسمش چی هست
اینکه فرمودید csrf token متوجه شدم و در موردش تحقیق کردم
آره به فکر خودم نرسیده بود که نیازی نیست با هر مرتبه رفرش شدن شناسه تغییر کنه و همین که ثابت باشه کافیه

hgfhjgjh
جمعه 03 خرداد 1398, 11:19 صبح
یک سوال دیگه هم داشتم، session فقط توسط کاربر زمانی که سایت رو باز کنه ایجاد میشه و در حالات دیگه ایجاد نمیشه ؟
مثلاً اگر با از file_get_content و یا curl سایت رو در یک آدرس متفاوت دریافت کنند و نمایش بدن باز هم Session ایجاد میشه یا خیر؟

plague
جمعه 03 خرداد 1398, 13:29 عصر
سشن وقتی سایت رو با مرورگر باز کنی ایجاد میشه ... چون یک کوکی داره که باید رو مرورگر کاربر ست بشه و بدون کوکی کار نمیکنه
البته curl امکان دریافت کوکی رو داره
ولی file_get_contents نه (حداقل فکر نمیکنم )

hgfhjgjh
جمعه 03 خرداد 1398, 17:07 عصر
یعنی اگر کاربر در مرورگر خودش قابلیت ذخیره کوکی رو غیر فعال کنه دیکه سشن ها هم ذخیره نمیشه ؟
اینجوری که خیلی بده و کل سایت از کار می افته اینجوری

hgfhjgjh
جمعه 03 خرداد 1398, 17:10 عصر
ببخشید زیاد سوال میپرسم؛ چرا بعضی سایت ها وقتی برای اولین بار سایت رو باز میکنیم یه نواری پایین یا بالای صفحه نمایش داده میشه با این مضمون که سایت ما از کوکی استفاده میکنه و ... و یک دکمه تأیید هم میذارند
آیا باید حتماً اعلام کنیم به کاربران که سایت از کوکی استفاده میکنه یا دلیل خاصی داره این اعلام کردن ؟

plague
جمعه 03 خرداد 1398, 17:31 عصر
یعنی اگر کاربر در مرورگر خودش قابلیت ذخیره کوکی رو غیر فعال کنه دیکه سشن ها هم ذخیره نمیشه ؟
اینجوری که خیلی بده و کل سایت از کار می افته اینجوری



سشن 2 بخش داره یکی فایل سشن که رو سرور ذخیره میشه و یکی هم کوکی که رو کامپیوتر کلاینت ذخیره میشه
از روی اون کوکی میشه فهمید که کدوم سشن برای کدوم کاربره
بدون کوکی سشن کار نمیکنه چون نمیشه تشخیص داد کدوم سشن برای کیه
از بد بودن که هست ولی خب مشکل اون شخصیه که غیر فعال کرده نمیخاد شما بهش فکر کنی
مثل اینه که ینفر که برنامه تلویزیونی میسازه نگران این باشه که بعضی خونه ها برق ندارن






ببخشید زیاد سوال میپرسم؛ چرا بعضی سایت ها وقتی برای اولین بار سایت رو باز میکنیم یه نواری پایین یا بالای صفحه نمایش داده میشه با این مضمون که سایت ما از کوکی استفاده میکنه و ... و یک دکمه تأیید هم میذارند
آیا باید حتماً اعلام کنیم به کاربران که سایت از کوکی استفاده میکنه یا دلیل خاصی داره این اعلام کردن ؟



بعضیا روی حریم شخصیشون حساس هستن این سایتا میخان به اونا اطمینان بدن
توی ایران کسی زیاد اهمیت نمیده به این مسائل

hgfhjgjh
جمعه 03 خرداد 1398, 17:51 عصر
مثل اینه که ینفر که برنامه تلویزیونی میسازه نگران این باشه که بعضی خونه ها برق ندارن

مثالی که زدید فوق العاده بود

واقعاً از توضیحات شما متشکرم
ممنونم که خیلی وقت گذاشتید و به سوالاتم پاسخ دادید سپاسگذارم

ali_sed
یک شنبه 05 خرداد 1398, 17:29 عصر
سلام

فقط من یک نکته را اضافه کنم که هدف از csrf token جلوگیری از ارسال اسپم توسط ربات ها نیست. به راحتی میشه یک ربات نوشت که اول توکن را از سایت شما بگیره و بعد درخواست های خود را ارسال کند.

فرض کنید من میدونم که شما مدیر سایت برنامه نویس هستید خوب معمولا شما به سایت تان لاگین کرده اید. از طرفی میدونم که آدرس حذف یک کاربر
http://yourdomain.com/user.php?del=25 است بنابراین کافیه یه ایمیل برای شما بفرستم که توش یه عکس با آدرس لینک بالا باشه. (روشهای دیگری هم هست) تا کاربر مورد نظر بدون اینکه شما متوجه شوید پاک شود.

اما اگر آدرس حذف کاربر باشه
http://yourdomain.com/user.php?del=25&token=somethindrandom چون هکر به توکن دسترسی نداره نمیتونه از این روش استفاده کنه.

حتما مقاله php security را مطالعه کنید. تا تمامی نکات مقابله با حملات شناخته شده را در برنامه خود لحاظ کنید.

hgfhjgjh
دوشنبه 06 خرداد 1398, 13:40 عصر
سلام
ali_sed (http://barnamenevis.org/member.php?19568-ali_sed) ممنونم بابت توضیحات شما

در راستای افزایش امنیت هیچ آدرس مستقیمی برای insert و delete و حتی update در کل پروژه تعریف نکردم و تنها با متد post و اتصال به صفحات مربوطه به این متدها و عملیات ها دسترسی داده شده و بجز چند مورد بسیار جزئی (مثل شماره صفحه و موارد مشابه جهت نمایش مطالب) از get استفاده نشده در پروژه


حتما مقاله php security را مطالعه کنید. تا تمامی نکات مقابله با حملات شناخته شده را در برنامه خود لحاظ کنید.
امکانش هست لینک مقاله را ارسال بفرمایید

ali_sed
دوشنبه 06 خرداد 1398, 14:05 عصر
در راستای افزایش امنیت هیچ آدرس مستقیمی برای insert و delete و حتی update در کل پروژه تعریف نکردم و تنها با متد post و اتصال به صفحات مربوطه به این متدها و عملیات ها دسترسی داده شده و بجز چند مورد بسیار جزئی (مثل شماره صفحه و موارد مشابه جهت نمایش مطالب) از get استفاده نشده در پروژه

روشی که در بالا گفتم تنها یک مثال بود ممکن است ریکوئست ناخواسته توسط مهاجم حتی با متد پست به طرق دیگری ارسال شود. مثلا در یک سایتی که معمولا سر میزنید اینجکت شود. یا داخل یک صفحه وب با جاوااسکریپت پیاده شده باشد و لینک این صفحه را برای شما ایمیل کنند و شما لینک را باز کنید. بنابراین به صرف استفاده از متد پست از توکن گذر نکنید. حتما در تمامی صفحاتی که حذف یا ویرایش در اطلاعات رخ میدهد از توکن استفاده کنید.




امکانش هست لینک مقاله را ارسال بفرمایید


مقاله ای که مد نظرم بود را پیدا نکردم:

ولی این دو مطلب بسیار مفید هستند:
در این مقاله بسیار خلاصه موارد مهم را اشاره کرده است:
https://www.sitepoint.com/8-practices-to-secure-your-web-app/

و در این مطلب نیز نکات مهم امنیتی در php آورده شده است.
https://www.php.net/manual/en/security.php

من حملات brute-force را ندیدم در این دو مقاله در مورد آن نیز مطالعه کنید.

فارسی هم اگر دوست دارید می توانید جستجو کنید مطالب خوبی پیدا خواهید کرد مثلا:
https://daskhat.ir/tag/نکات-امنیتی-در-php/

hgfhjgjh
دوشنبه 06 خرداد 1398, 14:33 عصر
ممنونم بابت توضیحات و راهنمایی هاتون

boot man
شنبه 12 مرداد 1398, 18:39 عصر
بعضیا روی حریم شخصیشون حساس هستن این سایتا میخان به اونا اطمینان بدن
توی ایران کسی زیاد اهمیت نمیده به این مسائل
درود اینطوری هم نیست
اروپا چند سالی هست قانونی ثبت کرده که برای استفاده از کوکی باید از کاربر بپرسی وگرنه سایت متخلف در اروپا فیلتر میشه (از اون ادا ادفارهای اروپاست دیگه) ولی اسیا و.. اینطور نیست اینم به اینخاطره که با کوکی ماین میکردند