یافتن نام جدول
پرس و جوی اصلی برنامه نام جدول را از قبل در درون خودش ساخته است، ولی ما نمی دانیم که آن نام چیست: چندین شیوه برای پیدا کردن آن یا )دیگر( نامهای جدول وجود دارند. یکی از شیوه هایی که ما برگزیدیم اتکا به ساب سلکت بود.
یک پرس و جوی مستقل از SWLECT COUNT (*) FROM TABNAME تعداد رکردها را در آن جدول برمی گرداند و البته رد می کند که آیا نام جدول مجهول و ناشناخته است یا نه. به منظور تحقیق درمورد نام جدول ما می توانیم این را در رشته کاریمان قرار دهیم:
SELECT email, passwd, login_id, full_name
FROM table
WHERE email= ‘x’ AND 1= (SELECT COUNT(*) FROM TABNAME);--‘;
ما توجه نمی کنیم که چند تا رکورد وجود دارند، قطعا تنها به اینکه آیا نام جدول معتبر است یا نه توجه می نماییم. با تاکید برروی چندین حدس و گمان، ما سرانجام آن اجزاء را که یک جدول معتبر در بانک اطلاعاتی بود تعیین کردیم. اما آیا آن جدولی است که در این پرس و جو استفاده میشود؟ به همین دلیل ما هنوز به تست دیگری برای استفاده از جدول نیاز داریم. تذکر: آن فقط برای جداولی که واقعا بخشی از این پرس و جو هستند کار می کند، نه صرفا بخاطر اینکه آن جدول است.
SELECT email, passwd, login_id, full_name
FROM members
WHERE email= ‘x’ AND members.email is NULL;--‘;
زمانی که این پیام "ایمیل مجهول یا ناشناخته است" برگردانده میشود، آن تایید کرده است که SQL ما سالم و بی نقص بوده و اینکه ما نام جدول را درست حدس زده بوده ایم. آن بعدا مهم خواهد بود اما ما ضمنان در عوض یک روش متفاوتی را اتخاذ نمودیم.
پیدا کردن بعضی کاربران
در این موضوع، ما تصور جزئی و مختصری از ساختار جدول اعضا داریم، اما ما فقط یک نام کاربری را می دانیم: عضو بی نظمی که ایمیل"کلمه عبور شما اینجاست" ما را دریافت کرده است. به خاطر داشته باشید که ما هرگز خود پیغام را دریافت نکرده ایم، تنها آدرسی را که ایمیل بدان ارسال گردیده است را دریافت کرده ایم. احتمالا برای دست یابی به داده های بیشتر، ما مایلیم تعدادی نام دیگر بدست آوریم ترجیحا برای کار کردن با آنها.
اولین جا برای شروع کردن، البته، برای پیدا کردن اینکه کی به کی است وب سایت شرکت می باشد: صفحات"تماس(contact)" و "درباره ما(about us)" اغلب فهرست می کنند که چه کسی دارد محل را اداره می کند. بسیاری از این صفحات در بر گیرنده آدرسهای ایمیل هستند، اما حتی آنهایی که آدرسهای ایمیل را فهرست نمی کنند می توانند برخی سرنخها را به ما بدهند که به ما اجازه می دهند آنها را با ابزار خودمان پیدا کنیم.
مقصود تایید کردن پرس و جویی است که از عبارت (clause) مشابه استفاده می کند، درحالی که به ما اجازه می دهد که هماهنگیهای جزئی نامها یا آدرسهای ایمیل را در بانک اطلاعاتی انجام دهیم، هر بار با اجراء کردن پیغام و ایمیل"ما کلمه عبور شما را ارسال کرده ایم". اخطار: اگرچه این هر دفعه که ما آن را اجراء می کنیم یک آدرس ایمیل نشان می دهد، آن نیز درواقع آن ایمیلی را ارسال می نماید که ممکن است تردیدها و بدگمانیها را افزایش دهد. این بیان می کند که ما آن را آسان می گیریم.
ما می توانیم آن پرس و جو را درمورد نام ایمیل یا نام کامل ) یا احتمالا اطلاعات دیگر( انجام دهیمف، هربار با ارائه کردن آن کارتهای% که شبیه پشتیبانیهایی است:
SELECT email, passwd, login_id, full_name
FROM members
WHERE email= ‘x’ OR full_name LIKE ‘%BOB%’;
در نظر داشته باشید که گرچه ممکن است بیش از یک "Bob" وجود داشته باشد، ما تنها یکی از آنها را مشاهده می کنیم: این پالاییدن عبارت مشابه ما را به دقت پیشنهاد می نماید.
سرانجام، ما ممکن است فقط به یک آدرس ایمیل برای اجراء و کنترل روشمان نیاز داشته باشیم.
قدرت و توان حدس کلمه عبور
یک فرد مطمئنا می تواند از قدرت و توان حدس کلمات عبور در صفحه لاگ این استفاده کند، اما بسیاری از سیستمها سعی می کنند که از این کار آگاه شوند یا حتی از آن جلوگیری نمایند. فایلهای ثبت وقایع، مصدود کننده های حساب، یا دیگر وسایل که اساسا مانع از تلاشهای ما میشوند می توانستند وجود داشته باشند، اما به خاطر ورودیهای حذف نشده، ما راه دیگری را داریم که به احتمال خیلی زیاد بسیار حفاظت شده می باشد.
ما در عوض آزمودن کلمه عبور حقیقی را در قطعه خودمان با مستقیما به حساب آوردن نام ایمیل و کلمه عبور انجام می دهیم. در مثالمان، ما از هدفمان bob@example.com استفاده می کنیم و کلمات عبور متعددی را امتحان می نماییم.
SELECT email, passwd, login_id, full_name
FROM table
WHERE email= ‘bob@example.com’ AND passwd= ‘hello123’;
این بدن شک SQL بی عیب و نقصی می باشد، از این رو ما انتظار نداریم هیچ گونه خطای سروری را مشاهده کنیم، و زمانی که ما پیغام " کلمه عبورتان برای شما میل شده است" را دریافت می کنیم، می می دانیم که ما آن کلمه عبور را پیدا کرده ایم. نشانه ما اکنون از بین رفته است، ولی ما کلمه عبور او را داریم.
این روش با نوشتن به زبان برنامه ریزی پرل می تواند مکانیزه شود، و هرچند ما در جریان تولید این نسخه بودیم، ما از بین بردن یک راه دیگر را قبل از امتحان کردن آن متوقف کردیم