رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کپچا
#46
(14-07-1394، 02:52 ب.ظ)ADMIN نوشته: نه موضوع اینه که چون توی سورس کد هشی که برای اعتبارسنجی لازمه وجود داره، میشه با این ابزارها خوند و فرم رو بصورت درخواست عادی فرستاد که اونم البته اگه مواردی مثل CSRF Protection و... رو فعال کنید، منتفیه اما در کل نیازی به JS نداره. و البته اگه ولیدیشن AJAX رو استفاده کنید، این موضوع کاملاً منتفی میشه.

نه این هش فقط برای سمته کاربر استفاده میشه میدونید که تو yii بعد از ارسال فرم دوباره عمل ولیدیشن انجام میشه
"مقدار char code تولید شده رو کسی نمیتونه ببینه" اگه میتونستن ببینن حرفه اشپیلن درست بود
یعنی حتی اگه متنه خوده کپتچا رو هم میزاشت هیچ هکر یا اسپمری نمیتونست اونو از توی جاوااسکریپت بخونه، مگه بیاد رمه سیستم رو بخونه که اینم بعیید میدونم به صرفه باشه
پاسخ
تشکر شده توسط:
#47
پایین صفحه توی سورس کد هش نوشته شده. متغیر hash توی سورس کد قرار گرفته.
پاسخ
تشکر شده توسط:
#48
آره الان دیدم، اونو چرا نوشته اونجا :|
پاسخ
تشکر شده توسط:
#49
خوب انتظار داشتین JS از کجا بفهمه تو PHP چه خبره؟!
پاسخ
تشکر شده توسط:
#50
ایجکس :|
میتونست تو سورس نزاره و فقط توی یه متغیر بزاره و مقدار هش بره تو رم
پاسخ
تشکر شده توسط:
#51
خوب اگه قرار بود با AJAX باشه دیگه همون enableAjaxValidation رو میگذاشتیم که اصلاً این بحثها منتفی بشه. صحبتمون سر Client Side Validation هست.
پاسخ
تشکر شده توسط: Eshpilen
#52
نه، متوجه نشدید انگار
من منظورم ولید کردن ایجکس نیست، شما عکس رو رفرش کنید، هش کد تغییر میکنه، ولی شما نمیتونید هشه جدید رو ببینید.
YII برای قسمت لود کپتچا برای بار اول از ایجکس استفاده نکرده برای همین هش کد رو گذاشته توی سورس
پاسخ
تشکر شده توسط:
#53
خوب موضوع اینه که وقتی شما با cURL و سایر روشها سورس رو میخونید، اصلاً نمیتونید کلیک کنید روی دکمه بازسازی تصویر و تولید رمز جدید تا با AJAX تولید بشه و هر درخواست شما معادل یکبار Refresh کردن صفحه است و تا وقتی که رمز قبلی رو حدس نزدین (3 بار اشتباه) در این حالت رمز جدیدی تولید نخواهد شد. درصورتی که 3 بار رمز رو اشتباه حدس بزنید، رمز جدید تولید میشه که میتونید این رو تنظیم کنید.
پاسخ
تشکر شده توسط: n0o0b_sina
#54
یک نکته ای رو هم بگم.
بهتره وقتی به ساز و کار اسپمر فکر میکنیم فقط به curl فکر نکنیم!
زبان های مختلفی وجود داره با امکانات مختلف.
مثلا تو vb6 ما به راحتی میتونیم به روباتی بنویسیم که کاملا مثل انسان عمل میکنه! همه رویدادهای کلیک و ... رو هم پشتیبانی میکنه.
WebBrowser1.Document.getElementByID("send").click
گرفتن اطلاعات Ajax هم که عین آب خوردنه!
کلا این روش جوابگو نیست! شما اینی که میگی رو درست کن من سه سوته اسپمرش رو بنویسم بدم بهت. Smile
پاسخ
تشکر شده توسط: Eshpilen
#55
خب بسم الله!!!
یه اسپمر بنویس که بتونه از این کپتچا رد بشه، بدون غیر فعال کردن js

<canvas width="200" height="75"></canvas>
<input placeholder="write here">
<button>check</button>
<script>
    var c = document.getElementsByTagName('canvas')[0],
        str;

    draw();
    document.getElementsByTagName('button')[0].addEventListener('click', function () {
        var input = document.getElementsByTagName('input')[0];
        if (input.value === str) {
            alert('correct');
        } else {
            alert('incorrect');
        }

        input.value = "";
        draw();
    });

    c.addEventListener('click', function () {
        draw();
    });

    function draw()
    {
        var c2d = c.getContext("2d");

        c2d.fillStyle = "red";
        c2d.fillRect(0, 0, c.width, c.height);

        c2d.fillStyle = "white";
        c2d.font = "30px Arial";
        c2d.fillText(str = str_rand(5), 10, 50);
    }

    function str_rand(length)
    {
        var text = "",
            possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

        for (var i = 0; i < length; i++) {
            text += possible.charAt(Math.floor(Math.random() * possible.length));
        }

        return text;
    }
</script>
پاسخ
تشکر شده توسط:
#56
خب یه سوال؟
شما الان اینو validate میکنی بعد چیکار؟ این به چه دردی میخوره؟
شما حتما باید سمت سرور validate انجام بدی!
حالا مشکل روش تو اینه که سمت سرور اعتبار سنجی نمیشه! و اگر هم بخوای انجام بدی باید مقدار کدکپچا رو بفرستی سرور. حالا میخوای چیکار کنی؟ مقدار وارد شده و مقدار کپچای صحیح رو میخوای بفرستی سرور؟؟؟ خب در اینصورت موقع ارسال مقدار کپچا رو میخونیم و همون مقدار صحیح رو جایگزین مقدار اشتباهی که کردیم میکنیم و تمام!
پس نباید مقدار کپچای صحیح فرستاده بشه پس در عمل کپچای شما بی استفاده است! چرا؟
چون سمت سرور اصلا اعتبار سنجی وجود نداره! پس من یا کپچا رو وارد نمیکنم و یا چیز الکی میزنم!

لطفا به روند کارت از صفر تا صد فکر کن و اگر من اشتباهی کردم بگو.


حالا فرض کنیم شما یه کاری کردی که حتما باید سمت کاربر اعتبار سنجی انجام بشه!
ما به راحتی میتونیم کد js به صفحه تزریق کنیم و اجراش کنیم و کد تورو خنثی کنیم.
پاسخ
تشکر شده توسط:
#57
والاه من نمیدونم اسپمر هم میتونه js تزریق کنه یا نه، هدف از اینم جلوگیری از اسپمه نه اطمینان از صحت اطلاعات
ولی این کد اگه js غیر فعال بشه کار نمیکنه. و با فعال بودن js سخت کسی بتونه از این بگذره
پاسخ
تشکر شده توسط:
#58
Call WebBrowser1.Document.parentWindow.execScript("document.getElementsByTagName('input')(0) = str;")
مراحل:
1- آدرس صفحه رو به ربات میدم.
2- وقتی صفحه باز شد کد بالا رو اجرا میکنم.
3- مقدار کد کپچا داخل جعبه متن نوشته میشه!

یادته گفتم سه سوت؟ Big Grin
پاسخ
تشکر شده توسط: n0o0b_sina , Eshpilen
#59
ما تسلیمیم Big Grin
پاسخ
تشکر شده توسط:
#60
(14-07-1394، 02:01 ب.ظ)محسن نوری نوشته: دوستان هر حرف دوتاتون درسته!
در بدترین حالت ما 308915776 حالت داریم. ولی به خاطر این کدی که سمت کاربر فرستاده میشه مجموع حالاتی که باید بررسی بشن در بهترین حالت 6^2 = 64 تا میشه.
تا اینجا حرف اشپیلن درسته! میگه این چیزی که اضافه کردن امنیت رو پایین آورده و درست میگه.
ولی از اونطرف آقای شهرکی میگن حداکثر testLimit 3 تا هست و راست میگن.
یعنی هکر باید این 64 تا رو بفرسته سمت سرور تا ولیدیت بشه ولی اگر 3 بار اشتباه بفرسته بار چهارم یه کد جدید تولید میشه.

با این حساب احتمال درست در اومدن کپچا حدود 4.68 درصد هست.
خوب بیان کردی آفرین.
ولی نفهمیدم 6^2 رو از کجا آوردی! منطقش چیه؟
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 3 مهمان