PDA

View Full Version : جلوگیری از ارسال مجدد فرم ها [اسپم]



Dark Lord
پنج شنبه 06 مرداد 1390, 21:29 عصر
سلام دوستان ، خسته نباشید .

برای جلوگیری از این کار راه های مختلفی وجود داره : برا مثال میشه از کد امنیتی استفاده کرد ، تعداد دفعات ارسال فرم در زمان رو محدود کرد یا برای فرم شناسه تعریف کرد و برسی کرد قبلا ارسال شده یا نه و ...

به نظر شما از چه روشی استفاده کنیم بهینه تر هست !؟ :متفکر:

ممنون .

binyaft
جمعه 07 مرداد 1390, 11:11 صبح
کد امنیتی
شمارش تعداد ارسال با IP
بن کردن IP

mr.zenith
جمعه 07 مرداد 1390, 13:22 عصر
سلام
سعی کنید اینقدر روی اعصاب بازدید کننده را نرید
کد امنیت و غیره واقعا چیز مزخرفی هست هر دفعه یکسری کارکتر که 2ساعت طول میکشه بفهمی چیه یا ایجا فاصله بین ارسال ها که کسی که واقعا اطلاعاتی داره باید بیخودی وقت خودش را تلف کنه.
به نظر من بهترین کار اینه که یکه گروه تازه وارد تعریف کنید که زیر 30 ارسال دارن این افراد مجبور باشن بین هر ارسال 1 دقیقه صبر کنند بعد ارسال انجام بدن ولی بالای تر از این سطح گروه آزاد باشن.

Dark Lord
جمعه 07 مرداد 1390, 18:18 عصر
بحث اسپم کاملا مشخص هست ، بیشتر منظورم رو ارسال مجدد یک فرم هست ، فرضا یک فرم رو کاربر پر و ارسال میکنه ! حالا اگه صفحه رو رفرش کنه دوباره ارسال میشه فرم ...

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

اینجا بسته به کدنویسیمون 2 تا مشکل پیش میاد ، شایدم بیشتر :

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

مشکل دوم این هست که اگر کد امنیتی قابلیت رفرش ( ایجاد کد جدید ) داشته باشه لازم نیست اصلا ریسند کنه با استفاده از مرورگر بک میزنه و و کد رو رفرش میکنه و کد جدید رو وارد و ...

برا حل این مشکل به نظر شما چکار باید کرد !؟ من فرم هام رو با id اعتبار سنجی میکنم ... :متفکر:

mr.zenith
جمعه 07 مرداد 1390, 19:41 عصر
خب شما باید تنظیم کنی بعد از وارد کردن اطلاعات مثلا بعد از ثبت نام به یک صفحه ی دیگه بره بعد هم چک کنی مثلا یک ایمیل آدرس دوبار وارد نشه اگر دوبار وارد شد ارور بده

Dark Lord
جمعه 07 مرداد 1390, 19:49 عصر
اینا که ساده ترین موضوعات هست ، فرضا شما redirect کردید به یک صفحه دیگه ... بازم 2 تا بک میزنه ... الان داشتم تست میکردم متوجه شدم روش خودم هم یک مشکل داره !!! فکر کنم نمیشه کاریش کرد مگر محدود کردن در زمان ...

eshpilen
جمعه 07 مرداد 1390, 19:55 عصر
مشکل دقیقا چیه؟
شما میخواید جلوی روبات ها رو بگیرید؟ راه حلش CAPTCHA است.
میخواید کاربران واقعی هم نتونن با فواصل کوتاه کامنت بزنن؟ ضمنا چه فاصلهء زمانی ای مد نظر شماست؟
از طرف دیگه حتی اگر محدودیت زمانی هم بذارید کاربر اگر سمج باشه بازم میتونه کامنت های بیشتری بزنه و اسپم کنه. این مشکلی نداره؟


برا جلوگیری از این کار میشه از کد امنیتی استفاده کرد
بله میشه. ولی بدون کد امنیتی هم میشه از ارسال مجدد فرمها جلوگیری کرد.
البته چون احتمالا میخواید از روباتها هم جلوگیری کنید همین روش رو میشه استفاده کرد که کاربرد دوگانه داشته باشه.


زمانی که اطلاعات فرم رو با موفقیت ذخیره کردیم کد امنیتی رو از اعتبار خارج کنیم که وقتی فرم ریسند شد خطای کد امنیتی داده بشه .
اصولا در خیلی از کاربردها باید کد امنیتی رو Invalidate کرد. چون اگر این کار رو نکنیم کاربر میتونه بار اول خودش کد امنیتی رو بخونه و بعد همون مقدار رو بده به یه برنامهء خودکار تا فرم های بعدی رو با سرعت زیاد ارسال کنه. هدف اصلی ما از کد امنیتی مگه جلوگیری از عمل روبات ها بجای انسان نیست؟

Dark Lord
جمعه 07 مرداد 1390, 20:06 عصر
ممنون دوستان ، من 2 تا هدف رو دنبال میکنم ، یکی جلوگیری از ارسال فرم توسط روبات هاست که تا حد زیادی جلو اینکار رو با captcha میشه گرفت ، این موضوع زیاد مهم نیست ... هدف دیگم این هست که کاربر نتونه فرم رو ریسند کنه یا با بک فرمی که قبلا سند کرده رو دو تا تغییر بده و دوباره ذخیره کنه ... از طرف دیگه نمیخوام تعداد ارسال رو محدود کنم که بره رو اعصاب طرف :دی

eshpilen
جمعه 07 مرداد 1390, 20:35 عصر
ریسند کردن رو که همون کپچا جلوگیری میکنه.
درمورد تغییر دادن هم یخورده پیچیده میشه. چون باید میزان شباهت متن یا فیلدهای قبلی رو با فیلدهای جدید محاسبه کنی. ولی باید دید اصلا این منطقی هست یا نه. چون اگر اجازه میدی کاربر بتونه کامنت پشت سر هم بزنه دیگه جلوگیری از شباهت چه صیغه ای هست؟ مثلا کاربر ممکنه بخواد یک اشتباه خودش رو در کامنت قبلی اصلاح کنه که طبیعتا کامنت بعدی هم بسیار شبیه کامنت قبلی خواهد بود. ضمنا این روش جلوی کسی رو که بخواد اسپم بزنه نمیگیره، چون طرف اگر بفهمه که جلوگیری بخاطر شباهت هست میتونه مقداری تغییرات بیشتر و اساسی تر اضافه کنه و دوباره کامنت بزنه. حتی میتونه کاراکترها و جملات بی هدفی رو در جای خاصی درج کنه تا الگوریتم شباهت دیگه عمل نکنه.
حتی اگر جلوی امکان پر بودن فیلدها با Back رو بگیری (بنظرم با جاوااسکریپت کار راحتی هست) بازم کاربر ممکنه متن خودش رو قبل از ارسال کپی کرده باشه. بعد امکان Autocomplete رو هم اگر خاموش کنی خب یک ویژگی مفید رو از همهء کاربران گرفتی.

اگر بخوای واقعا کنترل بیشتری روی کامنت داشته باشی یا باید کامنت افراد ناشناس رو غیرفعال کنی یا اینکه کامنت ها منتظر خواندن و تایید نهایی شما بمونن (این سیستم رو خیلی جاها اعمال میکنن). البته نهایتش هم میتونید خودتون بعدا کامنت های نابجا رو بررسی و حذف کنید و لزوما نیازی نیست تا حتما منتظر رسیدگی شما بمونن.
بهرحال در یه محیط عمومی وقتی اختیار عمومی داده میشه کنترل کامل و خودکار همه چیز ممکن نیست یا بسیار دشوار هست و اصلا ممکنه هدف از عمومی بودن رو هم زیر سوال برده و محدودیتی که ایجاد میکنه مزایای شرکت عموم رو خدشه‌دار کنه.
اگر اجازه میدید همهء مردم حرف بزنن، در هر جایی، بهرحال عده ای حرف نامربوط یا حرفهایی برای استفادهء شخصی یا آزار و خرابکاری هم خواهند داشت. همهء اینا رو هیچ نرم افزار و ترفندی نمیتونه بصورت خودکار تشخیص بده و این به تشخیص و نظر و خواسته های شما برمیگرده.

Dark Lord
جمعه 07 مرداد 1390, 22:58 عصر
کاملا درست میفرمایید ، حالا فرض رو روی فرم های خاص بزاریم مثل ثبت نام و موارد مشابه ... توی پست دومم در اینباره توضیح دادم ولی یک بار دیگه مختصر میگم .

من وقتی داده ارسالی رو چک میکنم اگر مشکلی وجود داشته باشه کاربر رو میفرستم به فرم ، فیلد ها رو با داده ارسال شده قبلی پر میکنم تا کاربر مجبور نباشه دوباره پرشون کنه ... و بالای فرم خطا ها رو ذکر میکنم .

فرضا کاربر فرم رو ارسال کرد و همه چیز درست پیش رفت بعد از سیو کردن اطلاعات کد امنیتی رو حذف میکنم تا نتونند فرم رو ریسند کنند ، حالا اگر صفحه رو رفرش کنند چون کد امنیتی فاقد اعتبار هست کاربر منتقل میشه به فرم و اطلاعات فرم اتوماتیک پر میشه و کاربر یک کد امنیتی میزنه و دوباره فرم رو ارسال میکنه :دی

برای اینکه این کار رو تنونند انجام بدن برا فرم یک id کد شده میزارم و id رو توی سشن ثبت میکنم بعد موقع پردازش فرم id رو دیکد میکنم و با id سشن مطابقت میدم اگر نتیجه درست نبود یوزر رو ریدایرکت میکنم یوزر رو به صفحه ثبت نام اگر درست بود ادامه کار در نهایت سشن رو پاک میکنم تا اگر ریسند کنند چون id ارسالی با سشن ( وجود نداره ) مطابقت نداره ریداریکت میشه یوزر ... تا اینکه دیدم اگر کاربر چند تا بک بزنه و برگرده فرم ثبت نام و صفحه رو رفرش کنه ، اطلاعاتی که توی فرم هست میمونه و یک فرم جدید و سشن جدید ست میشه که کل ماجرا رو هیچ و پوچ میکنه ... :قهقهه:

هر چی فکر میکنم جز تایم راه بهتری نیست ، که اونم اعصاب خورد کن هست .

eshpilen
جمعه 07 مرداد 1390, 23:25 عصر
اطلاعاتی که توی فرم هست میمونه و یک فرم جدید و سشن جدید ست میشه که کل ماجرا رو هیچ و پوچ میکنه ...دقیقا یعنی چی اطلاعات توی فرم میمونه؟
بعدم مگه شما موقع ثبت نام چیزهایی مثل ایمیل یا نام کاربری رو چک نمیکنی که تکراری نباشن؟

اطلاعات فرم رو هم میشه پاک کرد. صفحهء ثبت نام اگر رفرش بشه (که برای آپدیت شدن کد امنیتی لازمه) پس بنابراین مقادیر فیلدهای فرم از سمت سرور دریافت میشه که طبیعتا باید خالی ارسال بشن.

بعد کاربر برای چی میخواد چنین کاری بکنه؟ یعنی میخواد چند بار ثبت نام کنه؟ با چند نام کاربری مختلف؟

Dark Lord
جمعه 07 مرداد 1390, 23:52 عصر
دقیقا یعنی چی اطلاعات توی فرم میمونه؟تمام فیلد ها ، تو فایرفاکس که این طور هست شما یک فرم بازکنید ، یک متن توش بنویسید ، صفحه رو رفرش کنید ، متن فیلد ها باقی میمونه ، FF اتوماتیک وارد میکنه ...


بعدم مگه شما موقع ثبت نام چیزهایی مثل ایمیل یا نام کاربری رو چک نمیکنی که تکراری نباشن؟چرا :دی


اطلاعات فرم رو هم میشه پاک کرد. صفحهء ثبت نام اگر رفرش بشه (که برای آپدیت شدن کد امنیتی لازمه) پس بنابراین مقادیر فیلدهای فرم از سمت سرور دریافت میشه که طبیعتا باید خالی ارسال بشن.برا کد امنیتیم رفرش گذاشتم :متفکر:


بعد کاربر برای چی میخواد چنین کاری بکنه؟ یعنی میخواد چند بار ثبت نام کنه؟ با چند نام کاربری مختلف؟ سادیسم :لبخند: ، آره چند تا ثبت نام و کلا همون سادیسم :قهقهه:

Dark Lord
جمعه 29 اردیبهشت 1391, 13:47 عصر
خلاصه ما به نتیجه نرسیدیما :لبخند:

everhang
جمعه 22 خرداد 1394, 19:22 عصر
سلام من یه پیج ساختم که قسم اش پر میکنن بعد ارسال میشه واسه من حالا میخوام کاری کنم هر ایپی فقط یک بار بتونه ارسال کنه میشه یه نفر کدش بزاره و یه توضیح هم بده کجا بزارمش

reza_alie
جمعه 22 خرداد 1394, 19:26 عصر
سلام شما می تونید یک فیلد داخل دیتا بیس به اسم آپی ایجاد کنید و هر سری که میخواین اطلاعات رو درج کنید ابتدا بررسی کنید که آیپی وجود داره یا نه اگه وجود نداشت اطلاعات درج بشه
برای بدست اوردن آی پی هم می تونید از قطعه کد زیر استفاده کنید


echo $_SERVER["REMOTE_ADDR"];
موفق باشی(بهتر بود که یک تاپیک جدید ایجاد می کردین )