ثبت نام عضو شک php. ما یک سیستم ثبت نام ساده باورنکردنی در PHP و MySQL ایجاد می کنیم

ثبت نام عضو شک php. ما یک سیستم ثبت نام ساده باورنکردنی در PHP و MySQL ایجاد می کنیم

برای تقسیم بازدیدکنندگان سایت به گروه های خاص، باید یک سیستم کوچک در سایت نصب شود ثبت php... بنابراین، شما بازدیدکنندگان را به صورت مشروط به دو گروه از بازدیدکنندگان تصادفی و به یک گروه ممتاز از کاربران که اطلاعات ارزشمندتری در اختیار آنها قرار می‌دهید، تقسیم می‌کنید.

در بیشتر موارد از سیستم ثبت ساده تری استفاده می شود که در یک فایل به زبان php نوشته می شود. register.php.

بنابراین، کمی منحرف می شویم و اکنون نگاهی دقیق تر به پرونده ثبت نام خواهیم انداخت.

فایل Register.php

برای اینکه وقت زیادی از شما نگیرد، سیستمی ایجاد می کنیم که کاربران را جمع آوری می کند و حداقل اطلاعات تماس را از آنها می گیرد. در این صورت همه چیز را وارد پایگاه داده mysql می کنیم. برای بالاترین سرعت پایگاه داده، جدول کاربران را با فرمت MyISAM و در کدگذاری utf-8 ایجاد می کنیم.

توجه داشته باشید! همه اسکریپت ها باید همیشه در یک کدگذاری نوشته شوند. همه فایل های سایت و پایگاه داده MySql باید در یک کدگذاری باشند. رایج ترین رمزگذاری ها UTF-8 و Windows-1251 هستند.

چرا باید همه چیز را در یک رمزگذاری بنویسید، مدتی بعد صحبت خواهیم کرد. تا آن زمان، این اطلاعات را به عنوان سخت‌گیرانه‌ترین قانون برای اسکریپت‌نویسی در نظر بگیرید، در غیر این صورت در آینده مشکلاتی با اسکریپت‌نویسی وجود خواهد داشت. البته اشکالی ندارد، اما شما فقط زمان زیادی را به دنبال خطاهای فیلمنامه تلف می کنید.

خود فیلمنامه چگونه کار خواهد کرد؟

ما می خواهیم همه چیز را ساده کنیم و نتایج سریع بگیریم. بنابراین، ما فقط لاگین، ایمیل و رمز عبور را از کاربران دریافت خواهیم کرد. و برای محافظت در برابر ربات های هرزنامه، یک کپچای کوچک نصب خواهیم کرد. در غیر این صورت، پسری از لندن یک تجزیه کننده ربات کوچک می نویسد که در عرض چند دقیقه کل پایگاه داده را با کاربران جعلی پر می کند و از نبوغ و مصونیت او خوشحال می شود.

اینجا خود فیلمنامه است. همه چیز در یک فایل نوشته شده است register.php:

! ` // علامت سوال قرمز $ sha = $ sh. "scripts / pro /"; // مسیر پوشه اصلی $ bg = `bgcolor =" # E1FFEB "`; // رنگ پس زمینه خطوط؟> نمونه ای از اسکریپت ثبت register.php style.css "/>

در این صورت فیلمنامه به خودش اشاره دارد. و فرم و پردازشگر داده های وارد شده به فرم است. لطفاً توجه داشته باشید که فایل در یک بایگانی فشرده فشرده شده است و حاوی فایل پیکربندی config.php، روکش پایگاه داده کاربران، فایل حاوی helper functions.php، فایل style.css و خود فایل register.php است. همچنین چندین فایل وجود دارند که وظیفه عملیات و تولید نمادهای کپچا را بر عهده دارند.

امروز ما بهره برداری از یک آسیب پذیری حیاتی 1 روزه در CMS محبوب جوملا را در نظر خواهیم گرفت که در پایان اکتبر در اینترنت غوغا کرد. در مورد آسیب پذیری ها با اعداد صحبت خواهیم کرد CVE-2016-8869, CVE-2016-8870و CVE-2016-9081... هر سه برخاسته از یک تکه کد هستند که برای پنج سال طولانی در بطن فریمورک به سر می‌بردند و منتظر بودند تا ساعت خود رها شوند و هرج و مرج، سایت‌های هک شده و اشک‌های کاربران بی‌گناه این جوملا را به همراه داشته باشند. فقط شجاع ترین و جسورترین توسعه دهندگان که چشمانشان از نور مانیتور قرمز شده است و کیبوردها پر از خرده نان است، توانستند ارواح شیطانی خشمگین را به چالش بکشند و سر خود را بر قربانگاه اصلاحات بگذارند.

هشدار

تمام اطلاعات فقط برای مقاصد اطلاعاتی ارائه شده است. نه هیئت تحریریه و نه نویسنده مسئولیتی در قبال آسیب احتمالی ناشی از مطالب این مقاله ندارند.

چگونه همه چیز شروع شد

در 6 اکتبر 2016، دمیس پالما موضوعی را در Stack Exchange ایجاد کرد که در آن پرسید: چرا در واقع در جوملا نسخه 3.6 دو روش برای ثبت نام کاربران با همان نام ثبت () وجود دارد؟ اولی در UsersControllerRegistration و دومی در UsersControllerUser است. Damis می خواست بداند که آیا روش UsersControllerUser :: register () در جایی استفاده می شود یا اینکه این فقط یک نابهنگاری تکاملی است که از منطق قدیمی باقی مانده است. او نگران این بود که حتی اگر این روش توسط هیچ دیدگاهی مورد استفاده قرار نگیرد، باز هم می‌توان آن را با یک درخواست تولید شده فراخوانی کرد. که من پاسخی از یک توسعه دهنده با نام مستعار itoctopus دریافت کردم، که تایید کرد که مشکل واقعا وجود دارد. و گزارشی را برای توسعه دهندگان جوملا ارسال کرد.

رویدادهای بعدی به سریع ترین شکل توسعه یافتند. در 18 اکتبر، توسعه دهندگان جوملا گزارشی از Damis را می پذیرند، که تا آن زمان یک PoC طراحی کرده بود تا امکان ثبت نام کاربر را فراهم کند. او یادداشتی را در وب سایت خود منتشر کرد که در آن به تشریح مشکلی که پیدا کرده بود و افکار خود را در این مورد اشاره کرد. در همان روز نسخه جدید جوملا 3.6.3 منتشر شد که همچنان حاوی کد آسیب پذیر است.

پس از آن، دیوید تامپلینی باگ را به حالت ثبت نام یک کاربر ساده، بلکه یک مدیر باز می کند. و در حال حاضر در 21 اکتبر، یک مورد جدید به تیم امنیتی جوملا می رسد. در حال حاضر در مورد افزایش امتیازات صحبت می شود. در همان روز، اطلاعیه ای در سایت جوملا ظاهر می شود مبنی بر اینکه در روز سه شنبه، 25 اکتبر، نسخه بعدی با شماره سریال 3.6.3 منتشر می شود که یک آسیب پذیری بحرانی در هسته سیستم را برطرف می کند.

در 25 اکتبر، تیم حمله امنیتی جوملا مشکل نهایی را پیدا می کند که توسط یک قطعه کد ایجاد شده است که Damis کشف کرده است. سپس یک commit به تاریخ 21 اکتبر با نام نامشخص Prepare 3.6.4 Stable Release به شعبه اصلی مخزن رسمی جوملا فرستاده می شود که باگ تاسف بار را برطرف می کند.

پس از این بیرون آمدن، افراد زیادی علاقه مند به جلسه توسعه دهندگان متصل می شوند - آنها شروع به باز کردن آسیب پذیری و آماده سازی اکسپلویت می کنند.

در 27 اکتبر، محقق هری رابرتز یک اکسپلویت آماده را در مخزن Xiphos Research آپلود می کند که می تواند یک فایل PHP را روی سروری با CMS آسیب پذیر آپلود کند.

جزئیات

خوب، کار با پس‌زمینه تمام شد، بیایید به جالب‌ترین بخش برویم - تجزیه و تحلیل آسیب‌پذیری. به عنوان یک نسخه آزمایشی، من جوملا 3.6.3 را نصب کردم، بنابراین تمام شماره خطوط مربوط به این نسخه خاص خواهد بود. و تمام مسیرهای فایل هایی که در زیر مشاهده می کنید نسبت به ریشه CMS نصب شده نشان داده می شوند.

به لطف یافته Damis Palma، می دانیم که دو روش وجود دارد که ثبت کاربر را در سیستم انجام می دهد. اولین مورد توسط CMS استفاده می شود و در فایل /components/com_users/controllers/registration.php:108 قرار دارد. دومی (کسی که باید آن را فراخوانی کنیم) در /components/com_users/controllers/user.php:293 زندگی می کند. بیایید نگاهی دقیق تر به آن بیندازیم.

286: / ** 287: * روش ثبت نام کاربر. 288: * 289: * @return boolean 290: * 291: * @since 1.6 292: * / 293: ثبت تابع عمومی () 294: (295: JSession :: checkToken ("پست") یا jexit (JText :: _ ("JINVALID_TOKEN"))؛ ... 300: // داده های فرم را دریافت کنید. 301: $ data = $ this-> input-> post-> get ("user", array (), "array");. .. 315: $ بازگشت = $ model-> اعتبار سنجی ($ فرم، $ داده)؛ 316: 317: // خطاها را بررسی کنید. 318: اگر ($ return === نادرست) 319: (... 345: / / ثبت نام را تمام کنید.346: $ return = $ model-> register ($ data);

در اینجا فقط سطرهای جالبی گذاشته ام. نسخه کامل متد آسیب پذیر را می توان در مخزن جوملا مشاهده کرد.

بیایید بفهمیم که در هنگام ثبت نام کاربر عادی چه اتفاقی می افتد: چه داده هایی ارسال می شوند و چگونه پردازش می شوند. اگر ثبت نام کاربر در تنظیمات فعال باشد، فرم را می توان در http://joomla.local/index.php/component/users/؟ View = ثبت نام یافت.


درخواست ثبت نام کاربر قانونی مانند تصویر زیر است.


کامپوننت com_users مسئولیت کار با کاربران را بر عهده دارد. به پارامتر وظیفه در درخواست توجه کنید. با فرمت $ controller است. $ Method. بیایید نگاهی به ساختار فایل بیندازیم.

نام اسکریپت های موجود در پوشه کنترل کننده هابا نام کنترل کننده های فراخوانی شده مطابقت دارد. از آنجایی که درخواست ما اکنون شامل $ controller = "registration" است، فایل فراخوانی می شود register.phpو روش ثبت () آن.

توجه، سوال: چگونه پردازش ثبت نام را به یک آسیب پذیری در کد منتقل کنیم؟ احتمالاً قبلاً حدس زده اید. نام آسیب پذیر و روش واقعی یکسان است (رجیستر)، بنابراین فقط باید نام کنترل کننده فراخوانی شده را تغییر دهیم. کنترل کننده آسیب پذیر کجا قرار دارد؟ درست است، در پرونده user.php... به نظر می رسد $ controller = "user". همه را با هم جمع کنید و task = user.register بگیرید. اکنون درخواست ثبت نام با روشی که ما نیاز داریم پردازش می شود.


دومین کاری که باید انجام دهیم این است که داده ها را با فرمت صحیح ارسال کنیم. اینجا همه چیز ساده است. ثبت نامشروع () از ما آرایه ای به نام jform انتظار دارد که در آن داده ها را برای ثبت نام ارسال می کنیم - نام، ورود به سیستم، رمز عبور، نامه (به تصویر صفحه با درخواست مراجعه کنید).

  • /components/com_users/controllers/registration.php: 124: // داده های کاربر را دریافت کنید. 125: $ requestData = $ this-> input-> post-> get ("jform", array (), "array");

بخش ما این داده ها را از آرایه ای به نام کاربر دریافت می کند.

  • /components/com_users/controllers/user.php: 301: // داده های فرم را دریافت کنید. 302: $ data = $ this-> input-> post-> get ("user"، array ()، "array");

بنابراین، نام تمام پارامترهای موجود در درخواست را از jfrom به user تغییر می دهیم.

مرحله سوم ما یافتن یک رمز CSRF معتبر است، زیرا بدون آن هیچ ثبت نامی وجود نخواهد داشت.

  • /components/com_users/controllers/user.php: 296: JSession :: checkToken ("پست") یا jexit (JText :: _ ("JINVALID_TOKEN"));

به نظر می رسد یک هش MD5 است و می توانید آن را برای مثال از فرم مجوز در سایت /index.php/component/users/?view=login بگیرید.


اکنون می توانید از طریق روش دلخواه کاربر ایجاد کنید. اگر همه چیز درست شد، به شما تبریک می گویم - شما فقط از یک آسیب پذیری سوء استفاده کردید CVE-2016-8870"فقدان بررسی مجوز برای ثبت کاربران جدید."

در روش ثبت کار () از کنترل‌کننده UsersControllerRegistration به این صورت است:

  • /components/com_users/controllers/registration.php: 113: // اگر ثبت نام غیرفعال است - به صفحه ورود هدایت شوید. 114: اگر (JComponentHelper :: getParams ("com_users") -> دریافت ("allowUserRegistration") == 0) 115: (116: $ this-> setRedirect (JRoute :: _ ("index.php? Option = com_users & مشاهده = ورود به سیستم "، نادرست))؛ 117: 118: بازگشت نادرست؛ 119 :)

و به این ترتیب در اقشار آسیب پذیر:

  • /components/com_users/controllers/user.php:

بله، به هیچ وجه.

برای درک دومین مشکل بسیار جدی تر، اجازه دهید درخواستی را که ایجاد کرده ایم ارسال کنیم و نحوه اجرای آن را در قسمت های مختلف کد دنبال کنیم. در اینجا قطعه ای است که مسئول اعتبارسنجی داده های ارسالی کاربر در یک روش کاری است:

ادامه فقط برای شرکت کنندگان در دسترس است

گزینه 1. برای مطالعه تمام مطالب سایت به انجمن "سایت" بپیوندید

عضویت در انجمن در مدت زمان مشخص شده دسترسی شما را به تمام مطالب هکر باز می کند، تخفیف تجمعی شخصی شما را افزایش می دهد و به شما امکان می دهد امتیاز Xakep حرفه ای را جمع آوری کنید!

اگر می‌خواهید یکی از بخش‌های سایت خود را در دسترس حلقه‌های محدود اما نامشخصی از افراد قرار دهید، ساده‌ترین راه برای انجام این کار ثبت نام و مجوز دادن به کاربران است. راه های زیادی برای احراز هویت کاربران وجود دارد. هم از ابزارهای وب سرور و هم از ابزارهای زبان برنامه نویسی می توان استفاده کرد. ما در مورد مورد استفاده از جلسات PHP صحبت خواهیم کرد.

احتمالاً دوست دارید راه مدرن تری برای ایجاد چنین شکلی ببینید. من هنوز یک ارائه کامل مدرن و به روز دارم، اما می بینید که فرم بازخورد را می توان با استفاده از تکنیک های شی گرا در PHP ساخت.

ابتدا اجازه دهید در مورد تمام مراحلی که در آینده انجام خواهیم داد بحث کنیم. ما حتی به چه چیزی نیاز داریم؟ ما به یک اسکریپت نیاز داریم که کاربر را ثبت کند، کاربر را مجوز دهد، کاربر را پس از مجوز به جایی هدایت کند. همچنین باید صفحه ای ایجاد کنیم که از دسترسی کاربران غیرمجاز محافظت شود. برای ثبت نام و مجوز، ما نیاز به ایجاد فرم های HTML داریم. ما اطلاعات مربوط به کاربران ثبت نام شده را در یک پایگاه داده ذخیره خواهیم کرد. این بدان معناست که ما هنوز به یک اسکریپت برای اتصال به DBMS نیاز داریم. تمام کارهای ما توسط توابعی انجام می شود که خودمان خواهیم نوشت. ما این توابع را در یک فایل جداگانه ذخیره خواهیم کرد.

بنابراین، ما به فایل های زیر نیاز داریم:

  • ارتباط با DBMS؛
  • توابع سفارشی؛
  • مجوز؛
  • ثبت؛
  • صفحه محافظت شده
  • اسکریپت خاموش کردن کاربر.
  • اسکریپتی که وضعیت مجوز کاربر را بررسی می کند.
  • شیوه نامه برای ساده ترین طراحی صفحات ما.

اگر جدول مربوطه را در پایگاه داده خود نداشته باشید، همه اینها بی معنی خواهد بود. ابزار مدیریت DBMS خود را راه اندازی کنید (PhpMyAdmin یا خط فرمان، هر کدام راحت تر است) و پرس و جو زیر را در آن اجرا کنید:

CREATE TABLE `users` (` id` int (11) NOT NULL AUTO_INCREMENT، نویسه `login` (16) NOT NULL,` password` char (40) NOT NULL، «reg_date» مهر زمانی NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY id`)) ENGINE = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1;

من فایل های اسکریپت خود را به این شکل نام می برم (همه آنها در یک دایرکتوری قرار می گیرند):

  • database.php;
  • functions.php;
  • login.php;
  • register.php;
  • index.php;
  • logout.php;
  • checkAuth.php;
  • style.css.

هدف هر یک از آنها، مطمئنم، برای شما روشن است. بیایید با اسکریپت اتصال DBMS شروع کنیم. شما قبلا آن را دیده اید. فقط کد این اسکریپت را در فایلی به نام database.php ذخیره کنید. توابع سفارشی را در فایل functions.php اعلام خواهیم کرد. این همه چگونه کار خواهد کرد؟ یک کاربر غیرمجاز سعی می کند به سند محافظت شده index.php دسترسی پیدا کند، سیستم بررسی می کند که آیا کاربر مجاز است یا خیر، اگر کاربر مجاز نباشد، به صفحه مجوز هدایت می شود. در صفحه مجوز، کاربر باید یک فرم مجوز را ببیند. بیایید آن را انجام دهیم.

مجوز کاربر

ثبت نام.

حالا باید به شکل خود ظاهر خاصی بدهیم. در عین حال قوانینی را برای عناصر دیگر تعریف خواهیم کرد. من قصد دارم محتوای کامل شیوه نامه را در اختیار شما بگذارم و از خودم جلوتر بگیرم.

/ * فایل style.css * / .row (حاشیه-پایین: 10 پیکسل؛ عرض: 220 پیکسل؛) برچسب ردیف (نمایش: بلوک؛ وزن قلم: پررنگ؛) .ردیف ورودی. متن (اندازه فونت: 1.2em. padding: 2px 5px;) .to_reg (اندازه قلم: 0.9em;). دستورالعمل (اندازه قلم: 0.8em؛ رنگ: #aaaaaa؛ حاشیه سمت چپ: 2px؛ مکان نما: پیش فرض؛) .error (رنگ: قرمز. حاشیه سمت چپ: 3 پیکسل؛)

اگر همه چیز به درستی انجام شد، باید موارد زیر را در مرورگر خود داشته باشید:

البته ما هنوز یک کاربر ثبت نام نکرده ایم و برای ورود باید ثبت نام کنید. بیایید یک فرم ثبت نام درست کنیم.

ثبت نام کاربر

" />

احتمالاً متوجه شده اید که متغیرهای PHP در کدهای HTML وجود دارد. آنها محتویات ویژگی های فیلدهای متنی در فرم ها، محتویات ظروف برای نمایش خطاها هستند. اما ما این متغیرها را مقداردهی اولیه نکرده ایم. بیا این کار را انجا دهیم.

ثبت نام کاربر

" />
نام کاربری می تواند فقط شامل کاراکترهای لاتین، اعداد، نمادهای "_"، "-"، "." باشد. طول نام کاربری باید حداقل 4 کاراکتر و بیش از 16 کاراکتر باشد
در رمز عبور، فقط می توانید از کاراکترهای لاتین، اعداد، نمادهای "_"، "!"، "("، ") استفاده کنید. رمز عبور باید حداقل 6 کاراکتر و بیش از 16 کاراکتر باشد
رمز عبور قبلاً وارد شده را تکرار کنید

هیچ پارامتری در ویژگی action تگ form مشخص نشده است. در این حالت، هنگامی که داده های فرم ارسال می شود، در همان اسکریپتی که از آن ارسال شده است، پردازش می شود. بنابراین باید کدی بنویسیم که داده های فرم را پردازش کند. اما ابتدا اجازه دهید الگوریتم پردازش آنها را مورد بحث قرار دهیم.

ما نیاز داریم که فیلدهای ورود و رمز عبور خالی نباشند. سپس باید ورود به سیستم را برای مطابقت با الزامات بررسی کنید. رمز عبور همچنین باید الزامات توصیف شده را برآورده کند و رمز عبور تکرار شده باید با آن مطابقت داشته باشد و علاوه بر این، آنها باید یکسان باشند. در صورت عدم رعایت هر یک از این شرایط، پردازش داده های فرم باید متوقف شود، اعلان مربوطه باید در آرایه پیام های خطا نوشته شود و به کاربر نمایش داده شود. برای راحتی کاربر، ما ورود وارد شده توسط او را ذخیره می کنیم (اگر او آن را نشان داده است) و مقدار آن را در آرایه فیلد $ می نویسیم.

اگر همه چیز درست است، در پنجره مرورگر خود، با مراجعه به سند register.php، باید چیزی شبیه به این را ببینید:

حال، فرض کنید کاربر بدون پر کردن فیلدهای فرم، روی دکمه ثبت نام کلیک می کند. طبق الگوریتم ما، لاگین و رمز عبور نمی توانند خالی باشند. در صورت عدم رعایت این شرط امکان ثبت نام وجود ندارد. ما در نظر داریم که پردازش داده های فرم در اسکریپت فعلی انجام می شود. این بدان معناست که باید کد آن را با افزودن چک های مناسب تغییر دهیم. ما بلافاصله بررسی های زیر را تعیین خواهیم کرد. اگر هر دو ورود و رمز عبور وارد شده اند، باید مطابقت آنها را با الزامات مشخص شده بررسی کنید. برای بررسی لاگین و رمز عبور، توابع سفارشی را در فایل functions.php ایجاد می کنیم.

/ ** * functions.php * فایل با توابع سفارشی * / // شامل فایلی با پارامترهایی برای اتصال به DBMS require_once ("database.php"); ( = "شما نام کاربری را وارد نکردید"؛ خطای $ را برگردانید؛) / ** * نام کاربری را با استفاده از عبارات منظم بررسی کنید * ورود به سیستم باید حداقل 4 باشد، حداکثر از 16 کاراکتر باشد * باید شامل کاراکترهای لاتین، اعداد، * می تواند باشد. کاراکترهای "_"، "-"، "." * / $ pattern = "/^ [-_.az\d ](4,16)$/i"؛ $ result = preg_match ($ pattern, $ str) ; // اگر چک ناموفق بود، پیغام خطا برگردانید اگر (! $ نتیجه) ($ error = "کاراکترهای نامعتبر در نام کاربری یا نام کاربری خیلی کوتاه است (طولانی)"؛ خطای $ را برگردانید؛) // اگر همه چیز خوب است ، بازگشت true true را برگردانید;) // تابع رمز عبور کاربر را بررسی کنید checkPassword ($ str) (// مقدار اولیه متغیر را با یک پیام خطای احتمالی $ error = ""؛ // اگر وجود ندارد یک رشته با یک ورود ظاهر می شود، اگر (! $ str) یک پیغام خطا برگردانید ($ error = "شما رمز عبور وارد نکردید"; بازگشت خطای $; ( "") "* / $ pattern =" /^ [_!)(.az\d *(6,16)$/i "; $ result = preg_match ($ pattern, $ str)؛ // اگر چک شکست خورد، پیغام خطا برگردانید اگر (! $ نتیجه) ($ error = "کاراکترهای نامعتبر در رمز عبور کاربر یا رمز عبور بسیار کوتاه است (طولانی)"؛ خطای $ را برگردانید؛) // اگر همه چیز خوب است، بازگشت true بازگشت true ;)

حال باید فایل register.php را تغییر دهیم تا از توابعی که اعلام کرده ایم استفاده کنیم. یک شرط به اسکریپت اضافه می کنیم تا بررسی کنیم که دکمه ثبت نام کلیک شده باشد. در این شرایط، بررسی ورود و رمز عبور شروع می شود. اگر هر یک از بررسی ها ناموفق باشد، فرم را دوباره رندر می کنیم و یک پیغام خطا نمایش می دهیم. اگر خطایی وجود نداشته باشد، کاربر را ثبت می کنیم، دیگر فرم ثبت نام را نمایش نمی دهیم، کاربر را از ثبت نام موفق مطلع می کنیم و با استفاده از تابع هدر () او را به فرم مجوز هدایت می کنیم.

شما با موفقیت در سامانه ثبت نام کرده اید. اکنون به صفحه ورود هدایت خواهید شد. اگر این اتفاق نیفتاد، با استفاده از یک لینک مستقیم به آن بروید.

"; header ("Refresh: 5; URL = login.php ");) // در غیر این صورت کاربر را در مورد خطای else ($ errors [" full_error "] = $ reg;))) اطلاع دهید؟> ثبت نام کاربر
" />
نام کاربری می تواند فقط شامل کاراکترهای لاتین، اعداد، نمادهای "_"، "-"، "." باشد. طول نام کاربری باید حداقل 4 کاراکتر و بیش از 16 کاراکتر باشد
در رمز عبور، فقط می توانید از کاراکترهای لاتین، اعداد، نمادهای "_"، "!"، "("، ") استفاده کنید. رمز عبور باید حداقل 6 کاراکتر و بیش از 16 کاراکتر باشد
رمز عبور قبلاً وارد شده را تکرار کنید

باید متوجه عملکرد جدید دیگری در اسکریپت شده باشید - ثبت نام (). و ما هنوز آن را اعلام نکرده ایم. بیا این کار را انجا دهیم.

( ($ error = "ورود مشخص نشده است"؛ بازگشت $ error;) elseif (! $ رمز عبور) ($ error = "گذرواژه مشخص نشده است"؛ بازگشت $ خطا؛) // بررسی کنید آیا کاربر قبلاً ثبت نام کرده است // به اتصال DBMS () ؛ // یک رشته جستجو بنویسید $ sql = "SELECT` id` FROM `users` WHERE` login` = "". $ Login. "" "; // یک پرس و جو در پایگاه داده ایجاد کنید $ query = mysql_query ($ sql) یا die ( "")؛ // به تعداد کاربران با این ورود نگاه کنید، اگر حداقل یک نفر وجود دارد، // اگر (mysql_num_rows ($ query)> 0) ($ error =) پیام خطا برگردانید "کاربر با ورود مشخص شده قبلا ثبت شده است"؛ خطای $ را برگردانید؛) // اگر چنین کاربری وجود ندارد، آن را ثبت کنید // یک query string بنویسید $ sql = "INSERT INTO` users` (`id`,` login ", "رمز عبور") VALUES (NULL," ". $ ورود." "," ". رمز عبور $. "") "؛ // یک پرس و جو در پایگاه داده ایجاد کنید $ query = mysql_query ($ sql) یا die ("

امکان افزودن کاربر وجود ندارد: ". Mysql_error ().". خطایی در خط ". __LINE__."

")؛ // فراموش نکنید که ارتباط خود را از DBMS mysql_close قطع کنید ()؛ // مقدار true را برگردانید، که نشان دهنده ثبت موفقیت آمیز کاربر بازگشت true است؛)

اگر همه چیز درست باشد، کاربر شما ثبت خواهد شد. می توانید فرم را تست کنید. سعی کنید کاربرانی را با همان لاگین ها ثبت کنید. پس از ثبت نام موفق، کاربر به فرم مجوز هدایت می شود. قبلاً، ما فقط نشانه گذاری را برای نمایش این فرم ایجاد کردیم. از آنجایی که هیچ پارامتری در ویژگی action آن مشخص نشده است، داده های ارسال شده توسط فرم در همان اسکریپت پردازش می شوند. بنابراین باید کدی را برای پردازش بنویسیم و آن را به سند login.php اضافه کنیم.

مجوز کاربر

;">

اگر در سامانه ثبت نام نکرده اید، ثبت نام کنید.

احتمالاً متوجه شده اید که در اسکریپت مجوز ما یک تابع ناآشنا دیگر داریم - autorization (). این تابع باید ابتدا با بررسی اینکه آیا کاربر ثبت شده ای با نام کاربری و رمز عبور یکسان در پایگاه داده وجود دارد یا خیر، به کاربر اجازه می دهد. اگر چنین کاربری پیدا نشود، مجوز قطع می شود و پیام خرابی روی صفحه نمایش داده می شود. اگر بررسی موفقیت آمیز باشد، تابع مجوز () یک جلسه را شروع می کند و مقادیر نام کاربری و رمز عبور را روی آن می نویسد، اسکریپت را در مورد موفقیت آمیز بودن مجوز اطلاع می دهد و اسکریپت کاربر را به صفحه منبع محافظت شده هدایت می کند.

/ ** * تابع مجوز کاربر. * مجوز کاربران با ما * با استفاده از جلسات PHP انجام می شود. * / مجوز عملکرد ($ login, $ password) (// یک متغیر را با پیام خطای احتمالی مقداردهی کنید $ error = ""؛ // اگر خط ورود وجود ندارد، اگر (! $ login) پیام خطا برگردانید ($ error) = " Login specified "; return $ error;) elseif (! $ Password) ($ error =" Password specified "; return $ error;) // بررسی کنید آیا کاربر قبلاً ثبت نام کرده است // اتصال به DBMS Connect ( )؛ // باید بررسی کنیم که آیا چنین کاربری در بین کاربران ثبت شده وجود دارد یا خیر // نوشتن یک رشته جستجو $ sql = "SELECT` id` FROM `users` WHERE` login` = "". $ ورود. "" و `password` =" ". $ Password . "" "; // پرس و جو را اجرا کنید $ query = mysql_query ($ sql) یا die ("

قادر به اجرای پرس و جو نیست: ". Mysql_error ().". خطایی در خط ". __LINE__."

"); // اگر کاربری با چنین داده ای وجود ندارد، یک پیام خطا برگردانید if (mysql_num_rows ($ query) == 0) ($ error = "کاربر با داده های مشخص شده ثبت نشده است "; return $ error;) // اگر کاربر وجود دارد، جلسه session_start () را شروع کنید، // و نام کاربری و رمز عبور را در آن بنویسید // برای این کار از آرایه superglobal $ _SESSION $ _SESSION ["login"] = $ login; $ _SESSION [" رمز عبور"] = رمز عبور $؛ / / فراموش نکنید که اتصال پایگاه داده را ببندید mysql_close ()؛ // برای پیام مربوط به مجوز موفقیت آمیز کاربر بازگشت true؛) درست است.

هنگامی که کاربر وارد یک صفحه محافظت شده می شود، باید صحت داده های مجوز او را بررسی کنید. برای این ما به یک تابع سفارشی دیگر نیاز داریم. بیایید آن را checkAuth () بنامیم. وظیفه آن بررسی داده های مجوز کاربر با اطلاعات ذخیره شده در پایگاه داده ما خواهد بود. اگر داده ها مطابقت نداشته باشند، کاربر به صفحه مجوز هدایت می شود.

تابع checkAuth ($ ورود، $ رمز عبور) (// اگر نام کاربری یا رمز عبور وجود ندارد، اگر (! $ ورود ||! $ رمز عبور) false را بازگردانید، false را برگردانید؛ // بررسی کنید که آیا چنین کاربری ثبت شده است // به اتصال DBMS (); // یک رشته جستجو ایجاد کنید $ sql = "SELECT` id` FROM `users` WHERE` login` = "". $ Login. "" AND `password` = ". $ Password." "" ؛ // پرس و جو را اجرا کنید $ query = mysql_query ($ sql) یا die ("

قادر به اجرای پرس و جو نیست: ". Mysql_error ().". خطایی در خط ". __LINE__."

"); // اگر کاربری با چنین داده ای وجود ندارد، false را برگردانید؛ اگر (mysql_num_rows ($ query) == 0) (return false;) // فراموش نکنید که اتصال پایگاه داده mysql_close را ببندید ()؛ // در غیر این صورت ، بازگشت واقعی را به درستی برگردانید؛)

اکنون که کاربر در صفحه امن است، باید تابع اعتبارسنجی داده های مجوز را فراخوانی کنیم. ما اسکریپت تماس و بررسی را در یک فایل checkAuth.php جداگانه قرار می دهیم و آن را به صفحاتی که برای دسترسی عمومی بسته می شوند متصل می کنیم.

/ ** * اسکریپت برای بررسی مجوز کاربر * / // شروع یک جلسه، که از آن ما ورود و رمز عبور // کاربران وارد شده را استخراج می کنیم session_start (); // شامل یک فایل با توابع سفارشی require_once ("functions.php"); / ** * برای تعیین اینکه آیا کاربر وارد شده است، باید * بررسی کنیم که آیا رکوردهایی در پایگاه داده برای ورود * و رمز عبور او وجود دارد یا خیر. برای این کار از تابع سفارشی * برای بررسی صحت اطلاعات کاربر وارد شده استفاده می کنیم. * اگر این تابع false را برگرداند، هیچ مجوزی وجود ندارد. * در صورت عدم وجود مجوز، ما به سادگی * کاربر را به صفحه مجوز هدایت می کنیم. * / // اگر جلسه حاوی داده های ورود و رمز عبور است، // آنها را بررسی کنید اگر (isset ($ _ SESSION ["ورود"]) && $ _SESSION ["ورود"] && isset ($ _ SESSION ["رمز عبور" ] ) && $ _SESSION ["رمز عبور"]) (// اگر اعتبارسنجی داده های موجود انجام نشد اگر (! CheckAuth ($ _ SESSION ["ورود"]، $ _SESSION ["رمز عبور"])) (// هدایت کاربر به سربرگ صفحه مجوز ("مکان: login.php")؛ // توقف اجرای اسکریپت خروج؛)) // اگر اطلاعاتی در مورد ورود یا رمز عبور کاربر وجود ندارد، // فکر می کنیم مجوزی وجود ندارد، تغییر مسیر دهید کاربر // به صفحه مجوز دیگر ( سرصفحه ("مکان: login.php")؛ // لغو خروج اسکریپت؛)

حالا بیایید کد صفحه امن خود را ایجاد کنیم. بسیار ساده خواهد بود.

مجوز کاربر و ثبت نام

مجوز موفقیت آمیز

شما به یک صفحه امن دسترسی پیدا کرده اید. می توانید از سیستم خارج شوید.

همانطور که می بینید، در سند محافظت شده ما فقط یک فایل را شامل می شود - checkAuth.php. تمام فایل های دیگر در اسکریپت های دیگر گنجانده شده است. بنابراین، کد ما دست و پا گیر به نظر نمی رسد. ما ثبت نام و مجوز کاربران را سازماندهی کردیم. اکنون باید به کاربران اجازه خروج از سیستم را بدهید. برای این کار یک اسکریپت در فایل logout.php ایجاد می کنیم.

/ ** * اسکریپت خروج کاربر. از آنجایی که کاربران * از طریق جلسات مجاز هستند، ورود و رمز عبور آنها * در آرایه supergloban _SESSION $ ذخیره می شود. برای خروج از سیستم، به سادگی مقادیر * آرایه $ _SESSION ["login"] و $ _SESSION ["گذرواژه"] را از بین ببرید، پس از آن * کاربر را به صفحه مجوز هدایت می کنیم * / // مطمئن شوید برای شروع جلسه session_start (); unset ($ _ SESSION ["ورود"]); unset ($ _ SESSION ["رمز عبور"]); هدر ("مکان: login.php")؛

اسکریپت ثبت نام، مجوز و تایید کاربر آماده است. شما می توانید آن را در خانه استفاده کنید، آن را تکمیل کنید، آن را مطابق با نیاز خود تغییر دهید. اگر سوالی دارید می توانید در نظرات بپرسید. شما می توانید تمام فایل های ذکر شده در اینجا را به صورت بسته بندی شده در یک آرشیو دانلود کنید.

P.S. من می دانم که بهتر است کد شی گرا بنویسید، می دانم که ارزش انتقال و ذخیره رمز عبور در متن واضح را ندارد، که اطلاعات وارد شده به پایگاه داده باید از قبل بررسی شود. میدانم. من اینجا در مورد این موضوع صحبت نمی کنم.

سلام! اکنون سعی می کنیم با استفاده از PHP + MySQL ساده ترین ثبت نام را در سایت پیاده سازی کنیم. برای این کار باید آپاچی روی کامپیوتر شما نصب باشد. اصل اسکریپت ما در زیر نشان داده شده است.

1. بیایید با ایجاد صفحه کاربران در پایگاه داده شروع کنیم... این شامل اطلاعات کاربر (ورودی و رمز عبور) خواهد بود. بیایید به phpmyadmin برویم (اگر یک پایه در رایانه شخصی خود ایجاد کنید http: // localhost / phpmyadmin /). یک جدول ایجاد کنید کاربران، دارای 3 فیلد خواهد بود.

من آن را در پایگاه داده mysql ایجاد می کنم، شما می توانید آن را در پایگاه داده دیگری ایجاد کنید. سپس مقادیر را مانند تصویر تنظیم کنید:

2. اتصال به این جدول الزامی است.بیایید یک فایل ایجاد کنیم bd.php... محتوای آن:

$ db = mysql_connect ("سرور MySQL شما"، "ورود به این سرور"، "رمز عبور برای این سرور");
mysql_select_db ("نام پایگاه داده ای که به آن متصل می شویم"، $ db);
?>

در مورد من، به نظر می رسد این است:

$ db = mysql_connect ("localhost"، "user"، "1234");
mysql_select_db ("mysql"، $ db)؛
?>

پس انداز می کنیم bd.php.
خوب! ما یک جدول در پایگاه داده داریم، یک اتصال به آن. اکنون می توانید شروع به ایجاد صفحه ای کنید که در آن کاربران داده های خود را ترک کنند.

3. یک فایل reg.php با محتوا ایجاد کنید (همه نظرات داخل):



ثبت


ثبت
















4. یک فایل ایجاد کنید، که داده ها را وارد پایگاه داده و کاربر را ذخیره می کند. save_user.php(نظرات در داخل):



{
}
// اگر لاگین و رمز عبور وارد شده باشد، آنها را پردازش می کنیم تا برچسب ها و اسکریپت ها کار نکنند، شما هرگز نمی دانید افراد چه چیزی را می توانند وارد کنند.


// حذف فضاهای اضافی
$ login = trim ($ login);
$ رمز عبور = برش ($ رمز عبور)؛
// به پایگاه داده متصل شوید
// وجود کاربری با همان ورود را بررسی کنید
$ result = mysql_query ("SELECT ID FROM users WHERE login =" $ login "", $ db);
if (! خالی ($ myrow ["id"])) (
exit ("با عرض پوزش، نام کاربری که وارد کردید قبلا ثبت شده است. لطفا نام کاربری دیگری وارد کنید.");
}
// اگر نه، داده ها را ذخیره کنید
$ result2 = mysql_query ("INSERT INTO users (ورود، رمز عبور) VALUES (" $ login "," $ password ")");
// بررسی کنید که آیا خطا وجود دارد
اگر ($ نتیجه2 == "درست")
{
echo "شما با موفقیت ثبت نام کردید! اکنون می توانید وارد سایت شوید. صفحه اصلی";
}
دیگر (
echo "خطا! شما ثبت نام نکرده اید.";
}
?>

5. اکنون کاربران ما می توانند ثبت نام کنند!در مرحله بعد، باید یک "در" برای ورود به سایت برای کاربرانی که قبلا ثبت نام کرده اند ایجاد کنید. index.php(نظرات در داخل):

// کل رویه روی جلسات کار می کند. در آن است که داده های کاربر در حالی که او در سایت است ذخیره می شود. اجرای آنها در همان ابتدای صفحه بسیار مهم است !!!
session_start ();
?>


صفحه نخست


صفحه نخست











همین الان ثبت نام کنید



// بررسی کنید که آیا متغیرهای login و user id خالی هستند یا خیر
اگر (خالی ($ _ SESSION ["ورود به سیستم"]) یا خالی ($ _ SESSION ["id"]))
{
// اگر خالی باشد، پیوند را نمایش نمی دهیم
echo "شما به عنوان مهمان وارد شده اید
این لینک فقط برای کاربران ثبت نام شده در دسترس است ";
}
دیگر
{

در پرونده index.phpما لینکی را نمایش خواهیم داد که فقط برای کاربران ثبت نام شده باز خواهد بود. این تمام هدف اسکریپت است - محدود کردن دسترسی به هر داده.

6. یک فایل با تایید نام کاربری و رمز عبور وارد شده وجود دارد. testreg.php (نظرات در داخل):

session_start ()؛ // کل رویه روی جلسات کار می کند. در آن است که داده های کاربر در حالی که او در سایت است ذخیره می شود. اجرای آنها در همان ابتدای صفحه بسیار مهم است !!!
if (isset ($ _ POST ["login"])) ($ login = $ _POST ["login"]; if ($ login == "") (تنظیم نشده ($ login);)) // ورود وارد شده را وارد کنید توسط کاربر به متغیر $ login، اگر خالی باشد، متغیر را از بین می‌بریم
if (isset ($ _ POST ["password"])) ($ password = $ _ POST ["password"]; if ($ password == "") (تنظیم نشده ($ password);))
// پسورد وارد شده توسط کاربر را در متغیر $ password قرار دهید، اگر خالی بود، متغیر را از بین ببرید
اگر (خالی ($ login) یا خالی ($ password)) // اگر کاربر لاگین یا رمز عبور را وارد نکرده باشد، خطا صادر می کنیم و اسکریپت را متوقف می کنیم.
{
exit ("شما همه اطلاعات را وارد نکردید، به عقب برگردید و همه فیلدها را پر کنید!")؛
}
// اگر لاگین و رمز عبور وارد شده باشد، آنها را پردازش می کنیم تا برچسب ها و اسکریپت ها کار نکنند، شما هرگز نمی دانید افراد چه چیزی را می توانند وارد کنند.
$ login = stripslashes ($ login);
$ login = htmlspecialchars ($ login);
رمز عبور $ = stripslashes ($ رمز عبور);
$ رمز = htmlspecialchars ($ رمز عبور)؛
// حذف فضاهای اضافی
$ login = trim ($ login);
$ رمز عبور = برش ($ رمز عبور)؛
// به پایگاه داده متصل شوید
شامل ("bd.php")؛ // فایل bd.php باید در همان پوشه ای باشد که همه افراد دیگر هستند، اگر اینطور نیست، فقط مسیر را تغییر دهید.

$ result = mysql_query ("SELECT * FROM users WHERE login =" $ login "", $ db); // همه داده های مربوط به کاربر را با ورود وارد شده از پایگاه داده بازیابی کنید
$ myrow = mysql_fetch_array ($ نتیجه);
if (خالی ($ myrow ["رمز عبور"]))
{
// اگر کاربری با لاگین وارد شده وجود نداشته باشد
}
دیگر (
// اگر وجود دارد، پسوردها را بررسی کنید
if ($ myrow ["password"] == رمز عبور $) (
// اگر پسوردها مطابقت داشته باشند، یک جلسه برای کاربر شروع می کنیم! می توانید به او تبریک بگویید، وارد شد!
$ _SESSION ["login"] = $ myrow ["login"];
$ _SESSION ["id"] = $ myrow ["id"]؛ // از این داده ها اغلب استفاده می شود، بنابراین کاربر وارد شده "با خود حمل می کند"
echo "شما با موفقیت وارد سایت شدید! صفحه اصلی"؛
}
دیگر (
// اگر رمزهای عبور مطابقت ندارند

خروج ("با عرض پوزش، ورود شما وارد شده یا رمز عبور نادرست است.");
}
}
?>

پس این همه است! درس ممکن است خسته کننده باشد، اما بسیار مفید است. در اینجا، فقط ایده ثبت نشان داده می شود، سپس می توانید آن را بهبود ببخشید: حفاظت، طراحی، فیلدهای داده را اضافه کنید، آواتارها را بارگذاری کنید، از حساب کاربری خارج شوید (برای این، به سادگی متغیرهای جلسه را با عملکرد حذف کنید. تنظیم نشده) و غیره. موفق باشید!

من همه چیز را بررسی کردم، درست کار می کند!

خانم ها و آقایان،

یا باید بگویم "خانم های مهربان" و "مردان سخت" (بچه های سخت)!

در اینجا جدیدترین (کد جدید) reg.php من است. من آن را توسط:

  • حذف برچسب‌های نوار قدیمی، mysqli_escape_string.
  • پارامترهای ورودی محدود شده در فرم reg کاربر.
  • اضافه شدن کد htmlspecialcharacters در خروجی برای جلوگیری از تزریق sql.

قبل از اینکه بسیاری از برنامه نویسان اینجا و منابع دیگر به من کمک کنند، کدهای قدیمی من چقدر به هم ریخته بود (با تشکر از همه!).

خوب، کد جدید من کد تایید ایمیل و بسیاری دیگر را ندارد اما به زودی آنها را اضافه خواهم کرد. من آنها را از اینجا بیرون آوردم تا کد جدید را ساده کنم تا شما به راحتی کد را درک کنید. فقط اصول اولیه را در برداشت اول حفظ کرد. مابقی نیازها را در برداشت دوم اضافه خواهد کرد.
شما می توانید هر گونه پیشنهادی ارائه دهید و از کدنویسی انتقاد کنید (اما زحمت نشان دادن نمونه ای از بهبود در حوزه مورد انتقاد خود را بدهید). خوب؟

کد قدیمی:

connect_error) (die ($ conn-> connect_error);) // جزئیات سایت. $ site_domain = "site-domain.com"; $ site_name = "نام سایت"; $ site_admin_email = "admin@site-domain.com"; // هنگامی که ثبت نام کاربر روی دکمه ارسال کلیک می شود، اقدام زیر را انجام دهید. if (isset ($ _ POST ["submit"])) (// بررسی کنید که آیا کاربر فیلدهای "Username"، "Password" و "Email" را پر کرده است یا نه. اگر نه، هشدار دهید تا آنها را پر کنید. اگر ( ! خالی ($ _ POST ["member_registration_username"]) &&! خالی ($ _ POST ["member_registration_password"]) &&! خالی ($ _ POST ["member_registration_email"])) ($ Member_registration_username = trim (strip_olowerre (alsscapet) $ _POST ["member_registration_username"]))))، $ Member_registration_password = trim (strip_tags (md5 (mysqli_real_escape_string ($ conn, $ _ POST ["member_registration_password"])))))؛ // مطابقت نام کاربری را در جدول کاربران بررسی کنید. Sql = "انتخاب * از کاربران WHERE Usernames =" ". $ Member_registration_username." ""; $ Result = mysqli_query ($ conn, $ sql)؛ // اگر یک نام کاربری در ستون "Usernames" تطبیق داده شود، موارد زیر را انجام دهید .. if (mysqli_num_rows ($ نتیجه)! = 0) (// هشدار "username" قبلا گرفته شده را بدهید. $ _SESSION ["message"] = "این نام کاربری $ Member_registration_username قبلا ثبت شده است!"؛ خروج ();) / / بررسی کنید r مطابقت ایمیل در جدول کاربران. $ sql = "انتخاب * از کاربران WHERE ایمیل =" ". $ Member_registration_email." ""; $ نتیجه = mysqli_query ($ conn، $ sql); // اگر یک نام کاربری در ستون "Usernames" تطبیق دارد، پس موارد زیر را انجام دهید ... if (mysqli_num_rows ($ result)> 0) (// هشدار "ایمیل" را قبلاً دریافت کرده اید. $ _SESSION ["message"] = "این ایمیل $ Member_registration_email قبلا ثبت شده است!"؛ خروج () $ sql = "درج در کاربران (نام کاربری، رمز عبور، ایمیل) VALUES (" ". $ Member_registration_username." "," ". $ Member_registration_password." "," ". $ Member_registration_email." ")"; if ($ sql) (// هشدار داده می‌شود که اطلاعات کاربر جدید در db با موفقیت تخلیه شود. $ _SESSION ["message"] = "درج داده‌ها در جدول موفقیت آمیز است!";) else (// هشدار داده شود اطلاعات کاربر جدید در db a شکست $ _SESSION ["message"] = "درج داده ها در جدول شکست خورد!";)) else (// برای پر کردن همه فیلدها هشدار دهید. $ _SESSION ["message"] = "شما باید تمام ورودی ها را پر کنید. زمینه ها! ";))؟> <?php $site_name ?>صفحه ثبت نام

فرم ثبت نام

کد جدید:

آماده کنید ("INSERT INTO tbl_users (نام، رمز عبور) VALUES (?،؟)")) (// متغیرها را به عنوان رشته به پارامتر متصل کنید. $ stmt-> bind_param ("ss"، $ name، $ رمز عبور)؛ / / دستور را اجرا کنید. $ Stmt-> execute (); // بیانیه آماده شده را ببندید. $ Stmt-> close ();)) else (// هشدار دهید تا همه فیلدها پر شوند. Echo "شما باید پر کنید همه فیلدهای ورودی! ";))؟> <?php $site_name ?>صفحه ثبت نام

فرم ثبت نام

دوستان برنامه نویس، به کد دوم من نگاه می کنید، آیا فکر می کنید:

  • بهتر است؛
  • بدون درهم ریختگی;
  • قابل درک تر؛
  • بدون تزریق sql.

و در کد دوم من، هر فرصتی هست که بتوانید به من کمک کنید تا دستور INSERT sql (خط 45-55) را از pdo به سبک mysqli تبدیل کنم؟
من آن کد pdo را از:
wikihow.com

نحوه جلوگیری از تزریق SQL در PHP

امروزه تزریق SQL یکی از رایج ترین آسیب پذیری ها در برنامه های کاربردی در وب است. این مقاله به شما نشان می دهد که چگونه از تزریق SQL در وب سایت خود با استفاده از بیانیه های آماده در PHP 100٪ جلوگیری کنید. SQL Injection نوعی ...

از آنجایی که بیشتر کد من، در اسکریپت صفحات متعدد من، به سبک mysqli یا رویه ای است، اگر 10 خط به سبک pdo یا oop باشد، عجیب به نظر می رسد.
بله، می دانم که می دانم، باید این کار را به سبک pdo و oop انجام دهم، اما من هنوز یک مبتدی هستم و اکثر آموزش های php پایه به سبک mysqli و رویه ای هستند و بنابراین من هنوز نمی توانم به pdo و oop سوئیچ کنم. اجازه دهید من اول راه رفتن را یاد بگیر و بعد مثل کانگورو می پرم. من "هنوز یک کودک نوپا هستم. باید همه چیز را یک قدم در یک زمان انجام دهم وگرنه" گیج می شوم و از php عقب می افتم.

سوال: در اولین کد من (کد قدیمی)، خواهید دید که من از پیغام echo "اما" از Session Message استفاده نمی‌کنم، به‌جای اینکه 2 آموزش یوتیوب نشان داده‌اند که این کار را بدون توضیح دلیل انجام می‌دهم. بنابراین، می‌پرسم:

  1. تفاوت و مزایا (مزایا) و همچنین معایب بین پیام اکو و جلسه چیست؟
  2. چه زمانی باید از کدام یک از آنها استفاده کنم؟


© 2021 skypenguin.ru - نکاتی برای مراقبت از حیوانات خانگی