در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم
هیچکس دوست ندارد، موقع ورود یا ثبتنام یا استفاده از فرمهای وب، یک مشت حرف کج و معوج ببیند، و آنها را داخل فیلد مورد نظر وارد کند، اما آیا راه بهتری هم هست؟
بله، و بیشتر مردم از چنین راهی برای جلوگیری از حملات هرزنامهها بیخبرند.
در بحثهایی که برای جایگزینی CAPTCHA میشود، نظریهای است که طبق آن، میتوان با تشخیص رویدادهای ماوس و یا فشرده شدن کلیدها توسط جاوااسکریپت، از انسان بودن فرمپرکننده مطلع شد.
در زیر با کمک مثالی ساده، جانشینی برای CAPTCHA ایجاد می گردد. اما پیش از آن، بایستی نکات زیر را در نظر بگیرید.
1 – فرم شما باید برخی از رویدادهایی که دلیل فعالیت انسانیاند، ثبت کند.
2 – اگر جاوااسکریپت فعال نبود، باید یک جایگزین سریع داشته باشید.
3 – تمام این آزمایشها تا حد امکان باید از چشم کاربر دور بماند.
4 – برای روبوتها فهمیدن و دور زدن آزمایشهای شما، کار دشواری نیست.
آیا من انسانم؟
در ابتدا باید راهی بیابیم که فرم بتواند جواب سوال «آیا من انسانم؟» را به کد پشت صحنه بفرستد. بدین منظور، من از فیلد پنهان استفاده کردم. لازم بهذکر است، بر طبق نکات بالا، نام این فیلد هر چیزی میتواند باشد. اگر باتها اسم این فیلد را بدانند، در این صورت مدار صحیحی از طریق سیستم به آن پاس خواهند داد.
این فیلد هرجایی میتواند باشد، اما من قبل از بستن فروم میگذارمش.
<input type="hidden" name="imahuman
/> " 0" id="imahuman" value="
</form>
کد فوق را ببینید، مقدار این فیلد بهطور پیشفرض صفر درنظر گرفته شده است، که بهمعنای «خیر، این یک انسان نیست» است.
تغییر بهخاطر انسانها
در قطعه زیر میخواهیم وقتی رویداد خاصی اتفاق افتاد، مقدار imahuman را تغییر دهیم. تابعی که تشخیص آن رویداد را انجام میدهد، باید توسط یک کنترلکننده رویداد (EventHandler) کنترل شود و آن کنترلکننده خود از طریق یک فایل خارجی جاوااسکریپت به فایل پیوست شود، مطمئن باشید که توی خود کد htmlتان چیزی نمینویسید.
Set up//
addEvent(window, "load", setUpHumanTest, false);
function setUpHumanTest() {
var myforms = document.getElementsByTagName("form") ;
; i<myforms.length; i++) {0for (var i=
addEvent(myforms[i], "focus", markAsHuman, false);
addEvent(myforms[i], "click", markAsHuman, false);
}
}
function markAsHuman() {
";1document.getElementById("imahuman").value = "
}
var addEvent;
if (document.addEventListener) {
addEvent = function(element, type, handler) {
element.addEventListener(type, handler, null);
if (element.href) element.href="javascript:void('');" ;
{
{
else if (document.attachEvent) {
addEvent = function(element, type, handler) {
element.attachEvent("on" + type, handler);
if (element.href) element.href="javascript:void('');" ;
{
{
else {
addEvent = new Function;
}
حال از بالا به پایین آن را شرح میدهیم.
– خط آخر به این معنی است که کافی است یک دستور addEvent را اجرا کنید و کار را تمام کنید.
– تابع markAsHuman وقتی صدا زده میشود که ما گمان میکنیم کاربر یک انسان است. این تابع مقدار فیلد پنهان ما را از صفر به یک تغییر میدهد.
– تابع setUpHumanTest در حقیقت تمام صفحه را بررسی میکند و 2کنترل کننده جاوااسکریپت به فرم اضافه میکند.
1– اگر فرم دارای focus بود (در حال انجام عملیات، در اینصورت تابع markAsHuman فراخوانده میشود.)
2– اگر رویداد کلیک اتفاق افتاد، باز تابع markAsHuman فراخوانده میشود.
این رویدادها فقط در صفحه مرورگر اتفاق میافتد، بنابراین هرزنویسها یا کدها قادر به تغییر آن نخواهند بود.
3– با صدا زدن addEvent، تابع setUpHumanTest فراخوانده میشود.
تست نتایج با اسکریپت
فرم شما به یک اسکریپت دیگر ارسال میشود (که این اسکریپت معمولا PHP یا ASP است)، کافی است به این اسکریپت بگویید که هر کجا که imahuman صفر بود، فرم را در نظر نگیرد.
برخی از برنامهنویسان وانمود میکنند که اسکریپت کار میکند و بات را به صفحه موفقیت آمیز هم میبرند، اما کاری که قرار است را انجام نمیدهند و هرزنویس را گول میزنند. البته به عقیده من، این کار باعث میشود هرزنویس نسبت به تولید هرزنامه تشویق شود و بار اضافی روی سایت ایجاد کند.
در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم
گزارش «جامجم» درباره دستاوردهای زبان فارسی در گفتوگو با برخی از چهرههای ادب معاصر
معاون وزیر بهداشت: