(14-07-1394، 11:06 ب.ظ)Eshpilen نوشته: [ -> ]خوب بیان کردی آفرین.
ولی نفهمیدم 6^2 رو از کجا آوردی! منطقش چیه؟
خب طرز کار validate سمت کلاینتش اینطور بود که مجموع کاراکترها رو حساب میکرد.
یعنی اگر کاراکترها رو درست ولی جابجا بنویسیم ولیدیتور خطا نمیده. تست کردم اینطور بود.
چون 6 کاراکتر داریم در مجموع در بهترین حالت از چیدمان 6 کاراکتر 2 به توان 6 حالت بدست میاد.
البته جمع کاراکترهای دیگه هم ممکنه برابر با هش مورد نظر بشه.
ولی ما بهترین حالت رو حساب میکنیم.
(14-07-1394، 11:47 ب.ظ)محسن نوری نوشته: [ -> ]خب طرز کار validate سمت کلاینتش اینطور بود که مجموع کاراکترها رو حساب میکرد.
یعنی اگر کاراکترها رو درست ولی جابجا بنویسیم ولیدیتور خطا نمیده. تست کردم اینطور بود.
چون 6 کاراکتر داریم در مجموع در بهترین حالت از چیدمان 6 کاراکتر 2 به توان 6 حالت بدست میاد.
البته جمع کاراکترهای دیگه هم ممکنه برابر با هش مورد نظر بشه.
ولی ما بهترین حالت رو حساب میکنیم.
حال کردی همون اول که تابع هش رو دیدم فهمیدم این خاصیت رو داره؛ یعنی جابجایی کاراکترها تاثیری در هش نداره
قدرت تئوری و تحلیل ذهنی در همینه که آدم میتونه چیزهایی رو خیلی راحتتر و سریعتر بفهمه و پیشبینی کنه که با تست و تجربه ممکنه خیلی دیر یا حتی هیچوقت متوجه نشه.
البته این بهترین حالت رو فکر نمیکنم به هیچ وجه داشته باشیم و جمع کاراکترهای دیگری هم میتونه همون هش بشه. مثلا فرض کن خب شما بجای یک کاراکتر خاص میای و کاراکتر بعدیش رو که کد اسکی اون در نتیجه یک واحد بیشتره میذاری، حالا این یک واحد بیشتر در جمع رو اگر بیای بجای یه کاراکتر دیگه کاراکتر قبلیش رو در جدول اسکی بذاری خنثی میکنی و در نتیجه دوباره مجموع کدهای اسکی کاراکترها همون عدد درمیاد!
حالا من توی فکرم فرمول کلی و دقیق تعداد این حالات رو دربیارم بعنوان یه تمرین ریاضی! اگر هم موفق نشدم ممکنه برم توی اینترنت سایت پرسش و پاسخ های ریاضی مطرحش کنم.
ریاضیات برای یه برنامه نویس ابزار قدرتمندیه. خصوصا توی امنیت و رمزنگاری که ضروریه، ولی جاهای دیگر هم کاربرد کم پیش نمیاد. برنامه نویسی که ریاضیش خوب باشه یه سر و گردن بالاتره. البته ریاضیات فقط یک جزء مجموعهء دانش و مهارتهای تئوریک برنامه نویسیه.
نقل قول:چون 6 کاراکتر داریم در مجموع در بهترین حالت از چیدمان 6 کاراکتر 2 به توان 6 حالت بدست میاد.
فکر کنم اشتباهه!
ما میخوایم 6 کاراکتر رو در 6 جایگاه بذاریم میخوایم ببینم تعداد ترکیبات ممکن چندتاست.
ریاضیات دبیرستان اینا یادم رفته بود رجوع کردم به مفهوم جایگشت:
https://fa.wikipedia.org/wiki/%D8%AC%D8%...8.A8.D9.87
با این حساب جواب میشه 6! که میشه 720 حالت!
اوه تازه یه چیزی! ما کاراکترهای تکراری رو در نظر نگرفتیم!
در کد کپچا ممکنه کاراکترهای تکراری باشه، که در این صورت جابجایی اونا تاثیری نداره بحساب نمیاد.
در شدیدترین حالت که فرض کنیم تمام 6 کاراکتر بصورت تصادفی یکسان درآومدن، مثلا aaaaaa، اونوقت تنها یک ترکیب ممکن داریم.
پس باید تعداد این حالات تکراری ممکن رو هم حساب و کسر کرد.
یا مثلا 123451 خب حالا چطور تعداد ترکیبات متمایز ممکن رو حساب میکنیم؟
کم کم داریم وارد پیچیدگیهای ریاضی بیشتری میشیم مغزمون میره به سمت یه ورزش حسابی
بابا این دیگه چه الگوریتم هش و تابع ولیدیشن سمت کلاینته خداییش! هرچی بیشتر پیش میریم بیشتر به اسگولیسم موجود در این کدها پی میبریم
جابجا شدن کاراکترها رو که تشخیص نمیده، عوض شدن کاراکترها رو هم که در خیلی حالات تشخیص نمیده. پس دیگه چه ولیدیشنی هست
این هشی که نوشتن این تابع ولیدیشن که نوشتن واقعا مسخرس اصلا واسه چی نوشتن واسه چی گذاشتن! دقت که نداره، همینطوری رندوم یه بار درست عمل میکنه یه بار غلط، و از اونور امنیت کپچا رو پایین آورده زیر سوال برده. بنظر من سنگین تر بودن اصلا چنین چیزی درست نمیکردن چون واقعا کدنویسی سطح پایین و بچه گانه ایه اعتبار یه فریمورک اینقدر معروف رو خدشه دار میکنه.
بچه ها اینقدر اسپم ندید اقای صادقیان میاد جریمه میکنه ها!!!
Eshpilen عزیز، نمیدونم چرا اینقدر درکش برات سخته که این رو برای راحتی خود کاربر گذاشته و کاربر مریض نیست که ابزاری که برای راحتی خودش گذاشته شده رو دور بزنه. تازه اگه بتونه دور بزنه هم باز سمت سرور یقه اش رو میگیره. اینکه تعداد حالتها و تکرارها و ترتیب و... هم توی الگوریتم باعث نامعتبر شدن حالت کشف شده میشه، خودش داره نشون میده که احتمال حدس درست کد از روی عدد Hash که توی سورس کد وجود داره خیلی کمتر از اون چیزیه که اول بدست آوردین. شما اگه راه بهتری برای Validation سمت کلاینت داری ارائه بده. کلاً یکی از اصول پایه توی ولیدیتورهای Yii اینه که اعتبارسنجی سمت کلاینت رو هم ارائه بدن وگرنه اینهمه توی تبلیغاتش داد نمیزد پشتیبانی داخلی از امکانات وب 2 و اعتبارسنجی سمت کلاینت و AJAX و...
بازم میگم، اشتیاق عجیبی دارم ببینم راه بهتری برای اعتبارسنجی سمت کلاینت بدون اینکه کد کپچای سمت سرور توی سورس کد بیاد، سراغ داری یا نه. از روشهایی مثل AES و... هم نمیشه استفاده کرد چون باید کلید رمزنگاری هم به JS پاس داده بشه. پس لطفاً تو فضا سیر نکنید و منطقی باشین.
(15-07-1394، 09:20 ق.ظ)ADMIN نوشته: [ -> ]Eshpilen عزیز، نمیدونم چرا اینقدر درکش برات سخته که این رو برای راحتی خود کاربر گذاشته و کاربر مریض نیست که ابزاری که برای راحتی خودش گذاشته شده رو دور بزنه.
اگر کپچا اونقدری خوانا بود که بعید بود کاربر اشتباه بکنه، نیاز آنچنانی به این همه بند و بساط ولیدیت سمت کاربر هم نبود، اگر هم خوانا نیست ممکنه کاربر اشتباه بکنه که پس ولیدیت باید درست و حسابی باشه نه اینکه هزار جور حالت خطا رو تشخیص نمیده. مثلا abc رو کاربر وارد کنه cab تشخیص نمیده، اگر وارد کنه aad بازم تشخیص نمیده، وارد کنه bbb بازم تشخیص نمیده و غیره. خلاصه یه چیز مسخره ای هست!
با این هش و کدهایی که نوشتن، و هیچ کامنتی توضیحی چیزی هم نذاشتن که آخه یعنی چی داستان و این جنگولک واسه چی ارزشش رو داشته آیا، آدم بنظرش میاد که اصلا نسبت به این مسائل یا حداقل پاره ای از اونا آگاه نبودن بهش فکر نکردن درنظر نگرفتن کلا. و این یعنی کم سوادی و ناشی گری!
نقل قول:شما اگه راه بهتری برای Validation سمت کلاینت داری ارائه بده.
بخاطر همین اصولا کپچا رو نباید سمت کلاینت ولیدیت کرد. تنها راهش ajax هست که سمت سرور میشه ولی برای کلاینت هم فرندلی تره.
نقل قول:کلاً یکی از اصول پایه توی ولیدیتورهای Yii اینه که اعتبارسنجی سمت کلاینت رو هم ارائه بدن وگرنه اینهمه توی تبلیغاتش داد نمیزد پشتیبانی داخلی از امکانات وب 2 و اعتبارسنجی سمت کلاینت و AJAX و...
خب اینجا رو که خراب کردن. یه چیزی نمیشه نباید بشه، درست و حسابی نمیشه، درست نکنن بهتره تا اینکه به زور بخوان یه چیزی عجیب و غریب و چپرچلاق درست کنن بچپونن!
اینکه روی این چیزا اینطوری سطحی اصرار داشته باشی هم خودش نشانهء تفکر کودکانه است معلومه طرف هنوز نفهمیده علم و برنامه نویسی واقعی واقعیت و ارتباط فناوریها و پارامترهای مختلف چیه و این امور نسبی هستن نه مطلق!
شما سایت های حرفه ای رو هم نگاه کنید به ندرت میبینید بیان 100% و مطلق به یه روش خاص یه فناوری خاص بچسبن. مثلا ایجکس استفاده میکنن همه جا استفاده نمیکنن بعضی جاها هم همچنان روش کلاسیکه، یا مثلا نمیان فول فلش درست کنن سایت رو. این کارا کار آدمهای جوگیره کار آدمهای کم سواد آدمهایی که دیدگاههای ناپخته و کودکانه دارن (گرچه باهوش باشن و توانایی و سواد خوبی هم در پاره ای چیزها داشته باشن).
نقل قول:بازم میگم، اشتیاق عجیبی دارم ببینم راه بهتری برای اعتبارسنجی سمت کلاینت بدون اینکه کد کپچای سمت سرور توی سورس کد بیاد، سراغ داری یا نه.
من قبلا روش فکر و تحقیق کرده بودم به نتیجه ای نرسیدم.
اساسا شما فکر کنی ماهیت کپچا چیه چرا کد رو توی عکس میذارن میپیچونن که کامپیوتر نتونه تشخیص بده ولی انسان بتونه، از همین میتونی نتیجه بگیری استنباط کنی که هر نوع اطلاعاتی راجع به این تصویر اگر در دسترس کامپیوتر بذاری اگر کامپیوتر بتونه چیز بیشتری رو درموردش تشخیص بده خب این خودش میشه نقض قرض و صدمه زدن به علت وجودی کپچا! شما کپچا رو درست میکنی که کامپیوتر نتونه تشخیص بده، هرکاری میکنی که این کار رو براش سخت تر کنی، بعد دوباره خودت میای بهش کمک میکنی برای تشخیص؟! بنظر شما این یخورده متناقض و غیرمنطقی و مسخره نمیاد؟
اینا از ضعف تئوریک و تحلیل های منطقی درسته مهندس! من توی این زمینه واردم. بخصوص که بحث مرتبط با امنیت هم بوده که امنیت و رمزنگاری جزو حیطه های مورد علاقه و تخصص بنده هست.
قرار نیست به کامپیوتر کمک کنیم. داریم یه راهی پیش پای کلاینت میگذاریم که بدون اینکه واسه یه کد امنیتی، نیاز باشه کل فرم سابمیت بشه و اونطرف پردازش بشه و نتیجه نتیجه دوباره با برگردوندن کاربر به فرم و پیغام خطا اعلام بشه و این وسط هم کلی ترافیک الکی مصرف کنیم، همونجا سمت کلاینت بگه کدی که زده درسته یا نه. واقعاً فکر نمیکنم این مسئله به این اندازه که دارین میگین، مشکل ایجاد کنه و چیز مهمی باشه.
(15-07-1394، 10:05 ق.ظ)ADMIN نوشته: [ -> ]قرار نیست به کامپیوتر کمک کنیم. داریم یه راهی پیش پای کلاینت میگذاریم که بدون اینکه واسه یه کد امنیتی، نیاز باشه کل فرم سابمیت بشه و اونطرف پردازش بشه و نتیجه نتیجه دوباره با برگردوندن کاربر به فرم و پیغام خطا اعلام بشه و این وسط هم کلی ترافیک الکی مصرف کنیم، همونجا سمت کلاینت بگه کدی که زده درسته یا نه.
شما هرکاری بکنی راه رو داری پیش پای کامپیوتر و برنامه های کرک هم میذاری بهشون کمک میکنی. چون قرار نیست اصولا کامپیوتر بتونه از کد کپچا چیزی بفهمه بنابراین نمیتونه بفهمه کاربر درست وارد کرده یا نه. حتی بصورت احتمالاتی هم که باشه بازم شما داری به نفع کامپیوتر و حمله ها کار میکنی هدف کپچا رو تضعیف میکنی.
البته میشه مثلا طول کپچای وارد شده توسط کاربر رو تست کرد که کم یا زیادی وارد نکرده باشه، این راحته صدمه ای به امنیت هم وارد نمیکنه چون معمولا طول کدهای کپچا ثابته.
ولیدیت بیشتر از این فقط با سمت سرور میشه داشت که فرندلی ترین و بهینه ترین چیزی که میشه براش سمت کلاینت درست کرد روش ایجکس هست.
نقل قول:واقعاً فکر نمیکنم این مسئله به این اندازه که دارین میگین، مشکل ایجاد کنه و چیز مهمی باشه.
ببین مهندس شاید از نظر امنیتی مشکل جدی هم نباشه، ولی موضوع اینه اصولا این روش و کدها از هر جهت نگاه میکنی ناشیانه و مسخره بنظر میان یجوری انگار خیلی روی هوا و سرسری کار شده خودشون هم نمیدونستن دارن چکار میکنن، چون هیچ جنبه ای از اون طبیعی و استاندارد و طبق اصول مشخصی نیست همینطوری رندوم و ناقصه حتی در ولیدیشن هم براحتی ممکنه اشتباه بکنه.
بقول شما شاید اصرار داشتن بگن ما برای همه چیز ولیدیشن سمت کلاینت هم داریم و حتی یک مورد هم نتونستن تحمل کنن خلاف این ادعا باشه، در نتیجه اومدن یه چیزی سمبل کردن رفته پی کارش!!
(14-07-1394، 07:18 ب.ظ)محسن نوری نوشته: [ -> ]Call WebBrowser1.Document.parentWindow.execScript("document.getElementsByTagName('input')(0) = str;")
مراحل:
1- آدرس صفحه رو به ربات میدم.
2- وقتی صفحه باز شد کد بالا رو اجرا میکنم.
3- مقدار کد کپچا داخل جعبه متن نوشته میشه!
یادته گفتم سه سوت؟
راستی من str رو توی متغیر های ثابت تعریف کردم واسه همون تونستی استفاده کنی ازش، میزاشتمش توی function چطوری میخواستی استفاده کنی؟
فکر کنم اینطوری درست میشه
(15-07-1394، 11:42 ق.ظ)n0o0b_sina نوشته: [ -> ]راستی من str رو توی متغیر های ثابت تعریف کردم واسه همون تونستی استفاده کنی ازش، میزاشتمش توی function چطوری میخواستی استفاده کنی؟
فکر کنم اینطوری درست میشه
آقا جان شما هرچی بفرستی سمت کلاینت میشه با یه روبات هم درش آورد (البته غیر از چیزهایی مثل کپچا که به این راحتی نیست، و البته در اینطور موارد حتی خود مرورگر هم نمیتونه این کار رو بکنه). حالا میخواد هرجا باشه به هر شکلی باشه. فکر کن مرورگر هم یه برنامه هست، روبات هم یه برنامه، فرق ذاتی این دوتا چیه که مرورگر میتونه نهایتا مقدار مورد نظر شما رو پیدا و استفاده کنه اما روبات نمیتونه؟
مرورگر فرقش با روبات های معمولی اینه که یه برنامهء بزرگتر و پیچیده تری هست و امکانات بیشتری داره، ولی روبات هم اگر لازم باشه میتونه بزرگتر و پیچیده تر باشه و معمولا اصلا نیازی نیست به اندازهء مرورگر بزرگ و پیچیده باشه، چون خیلی کارهایی که مرورگر انجام میده امکاناتی که برای کاربران ارائه میده روبات نیازی نداره داشته باشه.
اکثرا هم راحتتر از این حرفهاست با یه رگولاراکسپرشن میشه هر اطلاعاتی رو از توی سورس درآورد. اگر نشد باز روشها راههای دیگر هست حتی میشه یک مرورگر کامل رو شبیه سازی کرد.
سخت تر و آسونتر داره ولی همشون شدنیه.
اصلا شما میتونی یه پلاگین اکستنشنی چیزی درست کنی بذاری که روبات خودش بصورت یک اکستنشن مرورگر عمل کنه و از مرورگر بعنوان انجین پردازشگر صفحات استفاده کنه. اینطوری هر امکاناتی مرورگر داره هر اطلاعاتی که هر زمان بدست میاره در اختیار روبات هم قرار میگیره و روبات میتونه به مرورگر دستور بده و تمام اعمال کاربر رو شبیه سازی کنه مثلا کلیک روی گزینه ها و غیره رو. اینطوری برای پیچیده ترین و مشکل ترین موارد میشه براحتی این پیچیدگی و حجم کار رو از دوش روبات برداشت و گذاشت مرورگر اونا رو هندل کنه. یعنی دیگه نیازی نیست کد اضافی بنویسی، چون دیگران از قبل نوشتن که همون مرورگر باشه! بازمتن هم هست و API و تشکیلات هم که کامل داره دم دست.
نقل قول:اصولا این روش و کدها از هر جهت نگاه میکنی ناشیانه و مسخره بنظر میان یجوری انگار خیلی روی هوا و سرسری کار شده خودشون هم نمیدونستن دارن چکار میکنن، چون هیچ جنبه ای از اون طبیعی و استاندارد و طبق اصول مشخصی نیست همینطوری رندوم و ناقصه حتی در ولیدیشن هم براحتی ممکنه اشتباه بکنه.
جالبیش به اینه که تابع هشی که نوشتن تحلیل ریاضیش دشواره (منکه نتونستم دربیارم) برای من و شما و هر برنامه نویس معمولی واقعا پیچیده است و نمیشه فرمولی درآورد محاسبه کرد که واقعا میزان خطای اون چقدره. آیا 50%؟ آیا 20%؟ 70%؟ 5%؟ معلوم نیست و بعید میدونم اونایی که این کد رو نوشتن هم تونسته باشن این کار رو بکنن و فرمول و محاسبه ای براش داشته باشن. باید بریم ببینیم خودمون میتونیم فرمولش رو دربیاریم یااینکه کلا کار ریاضیدان هاست بدیم بهشون حلش کنن!
شما یه کد مینویسی بعد خودت نمیدونی چطور عمل میکنه چقدر کارایی داره؟! حتی تقریبی هم نمیدونی احتمالا!! جالب نیست؟ نمیدونم اینا حداقل یه تست های گسترده زدن بررسی کردن یه میانگین گرفتن یا نه. بنظرم نمیرسه اینطور بوده باشه، هیچ اشاره و کامنتی هم که دیده نمیشه به چنین تحلیل ها و عدد و رقمی.
اگر از من میپرسیدن یا با یه متخصص درست و حسابی مشورت میکردن یه روش میدونم که خیلی حرفه ای تر از اینه چون حداقل فرمول و محاسبات ریاضیش روشن و حساب کردنش ساده هست حتی تنظیم کردنش هم براحتی قابل انجامه، یعنی شما میتونی راحت تنظیم کنی که میزان حالتهای ممکن چقدر باشه! حداقل اینطوری میدونی فرمول داری محاسبه و اثبات داری خودت میتونی تعیین کنی که دقیقا داری چکار میکنی چقدر میزان خطا هست.
این روشی که من میگم از یک پروتکل رمزنگاری یاد گرفتم که برای مقابله با حمله های DOS و اسپم استفاده میشه. توی ایران هم شاید اصلا هیچکس دیگه جز من از چنین روشی اطلاعی نداشته باشه! تاحالا هم جایی نگفتم چون فکر میکنم خیلی ها ممکنه بد برداشت کنن و جاهای نادرست ازش استفاده بکنن و خلاصه افراطی و بد استفاده بشه بجای اینکه فایده داشته باشه بیشتر موجب دردسر بشه!
البته کلیتش بنظر من اصولا نیازی نیست و عاقلانه هم بنظر نمیرسه این دنگ و فنگ و همچنین ابهام و خدشه ای که توی امنیت کپچا وارد میکنه زیر سوال میبره. آقا جان نهایت یه ولیدیت ایجکس میذاری دیگه! مشکلی هست؟ تازه خوندن کپچا هم اگر برای کاربر خیلی سخته زیاد اشتباه میشه، فکر کنم ساده تر و خواناتر کردن کپچا با اینکه اینم امنیت کپچا رو تضعیف میکنه ولی راه عاقلانه تری باشه تا چنین روشهای من درآوردی و متناقض!