(14-07-1394، 02:52 ب.ظ)ADMIN نوشته: [ -> ]نه موضوع اینه که چون توی سورس کد هشی که برای اعتبارسنجی لازمه وجود داره، میشه با این ابزارها خوند و فرم رو بصورت درخواست عادی فرستاد که اونم البته اگه مواردی مثل CSRF Protection و... رو فعال کنید، منتفیه اما در کل نیازی به JS نداره. و البته اگه ولیدیشن AJAX رو استفاده کنید، این موضوع کاملاً منتفی میشه.
نه این هش فقط برای سمته کاربر استفاده میشه میدونید که تو yii بعد از ارسال فرم دوباره عمل ولیدیشن انجام میشه
"مقدار char code تولید شده رو کسی نمیتونه ببینه" اگه میتونستن ببینن حرفه اشپیلن درست بود
یعنی حتی اگه متنه خوده کپتچا رو هم میزاشت هیچ هکر یا اسپمری نمیتونست اونو از توی جاوااسکریپت بخونه، مگه بیاد رمه سیستم رو بخونه که اینم بعیید میدونم به صرفه باشه
پایین صفحه توی سورس کد هش نوشته شده. متغیر hash توی سورس کد قرار گرفته.
آره الان دیدم، اونو چرا نوشته اونجا :|
خوب انتظار داشتین JS از کجا بفهمه تو PHP چه خبره؟!
ایجکس :|
میتونست تو سورس نزاره و فقط توی یه متغیر بزاره و مقدار هش بره تو رم
خوب اگه قرار بود با AJAX باشه دیگه همون enableAjaxValidation رو میگذاشتیم که اصلاً این بحثها منتفی بشه. صحبتمون سر Client Side Validation هست.
نه، متوجه نشدید انگار
من منظورم ولید کردن ایجکس نیست، شما عکس رو رفرش کنید، هش کد تغییر میکنه، ولی شما نمیتونید هشه جدید رو ببینید.
YII برای قسمت لود کپتچا برای بار اول از ایجکس استفاده نکرده برای همین هش کد رو گذاشته توی سورس
خوب موضوع اینه که وقتی شما با cURL و سایر روشها سورس رو میخونید، اصلاً نمیتونید کلیک کنید روی دکمه بازسازی تصویر و تولید رمز جدید تا با AJAX تولید بشه و هر درخواست شما معادل یکبار Refresh کردن صفحه است و تا وقتی که رمز قبلی رو حدس نزدین (3 بار اشتباه) در این حالت رمز جدیدی تولید نخواهد شد. درصورتی که 3 بار رمز رو اشتباه حدس بزنید، رمز جدید تولید میشه که میتونید این رو تنظیم کنید.
یک نکته ای رو هم بگم.
بهتره وقتی به ساز و کار اسپمر فکر میکنیم فقط به curl فکر نکنیم!
زبان های مختلفی وجود داره با امکانات مختلف.
مثلا تو vb6 ما به راحتی میتونیم به روباتی بنویسیم که کاملا مثل انسان عمل میکنه! همه رویدادهای کلیک و ... رو هم پشتیبانی میکنه.
WebBrowser1.Document.getElementByID("send").click
گرفتن اطلاعات Ajax هم که عین آب خوردنه!
کلا این روش جوابگو نیست! شما اینی که میگی رو درست کن من سه سوته اسپمرش رو بنویسم بدم بهت.
خب بسم الله!!!
یه اسپمر بنویس که بتونه از این کپتچا رد بشه، بدون غیر فعال کردن 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>
خب یه سوال؟
شما الان اینو validate میکنی بعد چیکار؟ این به چه دردی میخوره؟
شما حتما باید سمت سرور validate انجام بدی!
حالا مشکل روش تو اینه که سمت سرور اعتبار سنجی نمیشه! و اگر هم بخوای انجام بدی باید مقدار کدکپچا رو بفرستی سرور. حالا میخوای چیکار کنی؟ مقدار وارد شده و مقدار کپچای صحیح رو میخوای بفرستی سرور؟؟؟ خب در اینصورت موقع ارسال مقدار کپچا رو میخونیم و همون مقدار صحیح رو جایگزین مقدار اشتباهی که کردیم میکنیم و تمام!
پس نباید مقدار کپچای صحیح فرستاده بشه پس در عمل کپچای شما بی استفاده است! چرا؟
چون سمت سرور اصلا اعتبار سنجی وجود نداره! پس من یا کپچا رو وارد نمیکنم و یا چیز الکی میزنم!
لطفا به روند کارت از صفر تا صد فکر کن و اگر من اشتباهی کردم بگو.
حالا فرض کنیم شما یه کاری کردی که حتما باید سمت کاربر اعتبار سنجی انجام بشه!
ما به راحتی میتونیم کد js به صفحه تزریق کنیم و اجراش کنیم و کد تورو خنثی کنیم.
والاه من نمیدونم اسپمر هم میتونه js تزریق کنه یا نه، هدف از اینم جلوگیری از اسپمه نه اطمینان از صحت اطلاعات
ولی این کد اگه js غیر فعال بشه کار نمیکنه. و با فعال بودن js سخت کسی بتونه از این بگذره
Call WebBrowser1.Document.parentWindow.execScript("document.getElementsByTagName('input')(0) = str;")
مراحل:
1- آدرس صفحه رو به ربات میدم.
2- وقتی صفحه باز شد کد بالا رو اجرا میکنم.
3- مقدار کد کپچا داخل جعبه متن نوشته میشه!
یادته گفتم سه سوت؟
ما تسلیمیم
(14-07-1394، 02:01 ب.ظ)محسن نوری نوشته: [ -> ]دوستان هر حرف دوتاتون درسته!
در بدترین حالت ما 308915776 حالت داریم. ولی به خاطر این کدی که سمت کاربر فرستاده میشه مجموع حالاتی که باید بررسی بشن در بهترین حالت 6^2 = 64 تا میشه.
تا اینجا حرف اشپیلن درسته! میگه این چیزی که اضافه کردن امنیت رو پایین آورده و درست میگه.
ولی از اونطرف آقای شهرکی میگن حداکثر testLimit 3 تا هست و راست میگن.
یعنی هکر باید این 64 تا رو بفرسته سمت سرور تا ولیدیت بشه ولی اگر 3 بار اشتباه بفرسته بار چهارم یه کد جدید تولید میشه.
با این حساب احتمال درست در اومدن کپچا حدود 4.68 درصد هست.
خوب بیان کردی آفرین.
ولی نفهمیدم 6^2 رو از کجا آوردی! منطقش چیه؟