PDA

View Full Version : ایده و راحل برای انجام پروژه وب دایرکتوری



sargardoon
پنج شنبه 26 اسفند 1389, 23:44 عصر
برای یادگیری دارم یه پروژه ای انجام میدم که چندتا سوال و مشکل دارم، ممنونم میشم اگر راهنمایی کنید و یا اگر نظری در رابطه با بهتر شدن پروژه و یا امنیت بیشتره میشه بدهید.
کاربر این پروژه به صورت سیستم مدیریت محتوا برای دایرکتوری هستش.

روش کار:
مراحل ثبت نام کاربر جدید
1. ارزیابی تمامی داده بااستفاده از تابع Preg_match
2. ارزیابی از تکراری نبودن ایمیل و کلمه عبور
3. وارد کردن کد Captcha
4. تایید ثبت نام کاربر توسط مدیر، نوع کاربری (مدیرکل، ادیتور، مهمان) و ارسال ایمیل به کاربر برای فعال سازی حساب.

بعد از ثبت نام و بازیابی رمز
1. ابتدا چک میشه آیا کاربر وجود داره یا نه؟ بعد آیا توسط مدیر تایید شده؟ آیا حساب توسط کاربر فعال شده؟
2. برای بازیابی فقط ایمیل درخواست میشه و کدی 8 کاراکتری جدید برای کاربر ارسال میشه و کد هم در دیتابیس به صورت زیر ذخیره میشه

md5(mysql_real_escape_string($password));
3. بعد از اینکه مرحله اول درست بود وارد صفحه داشبورد میشه و با توجه به نوع کاربری امکاناتی در اختیارش قرار میگیره
4. بسته به نوع کاربر (مهمان) زمانی که پستی ارسال شد ابتدا توسط ادیتور و یا مدیر کل تایید میشه بعد بروی وب ارسال میشه.
5. ادیتور حق ویرایش، حذف پستهای خود و تایید پست های دیگران خواهد بود
6. این پروژه همچنین دارای سیستم پیغام هم هستش که کاربران میتوانند برای یکدیگر پیغام ارسال کنند.
7. برای پستها دسته، زیر دسته و برچسپ هم قرار داده میشه.

کارهای ابتدایی و طراحی قالب و 20% کد نویسی رو انجام داد. که انشالله بعد از اتمام اینجا میذارم برای تست و عیب یابی.

حال چند تا سوال داشتم:
1. برای اینکه بخواهیم از id به صورت AI استفاده نکنیم باید چه روش بهتری هست؟ مشکل اینه که با حذف یک رکورد سیستم شماره گذاری بهم میخوره؟ روشی در برنامه ای دیدم که یک جدول به نام (Track Transaction) داشت و آخرین فعالیتهاش رو آنجا به روز میکرد یعنی اینکه آخرین شماره کاربری، آخرین کد دسته و ....
سوال اینجاست که آیا از این روش میشه استفاده کرده؟ راه حل بهتری سراغ داری؟

2. باز بودن اتصال به MySQL و دیتابیس در طول برنامه اشکالی نداره؟

3. آیا بعد از اینکه کاربر وارد شد بهتر نیست که اطلاعات ضروری از قبیل را در یک فایل متنی، کوکی، Session ذخیره کرد و یا در همان در جایی تمامی آنها را به صورت Global تعریف کرد و مقدار دهی کرد؟

4. آیا راهی برای گفتن توضیحات فیلدها جدول وجود داره؟ مثلا اسم فیلد fname و توضیح First Name

5. برای نمایش داده ها به جز استفاده از table آیا راه بهتری سراغ دارید؟ لطفا اگر آموزشی سراغ دارید معرفی کنید.

6. برای امنیت بیشتر چه نکاتی رو باید در نظر داشت؟


فعلا این سوالات بمونه تا بعد اگر باز هم سوالی بود مزاحم میشم.

binyaft
جمعه 27 اسفند 1389, 09:44 صبح
1. ارزیابی تمامی داده بااستفاده از تابع Preg_match

زیاد جالب نیست! مثلا شما میخوای طول رشته رو اندازه بگیری بهتر هست که از strlen یا برای یونیکد از mb_strlen استفاده کنید
فقط زمانی از preg_match استفاده کنید که نام کاربر یا پست الکترونیک باید معتبر سازی بشه! مثلا رشته فقط انگلیسی باشه یا ایمیل درست باشه!


2. ارزیابی از تکراری نبودن ایمیل و کلمه عبور
:D ، اینطوری اگه به کاربر بگی کلمه عبور تکراری است ، به نظرت امنیت کاربرا پایین نمیاد!؟ حالا ایمیل یه چیزی!


3. وارد کردن کد Captcha

خوب هست ، اما زیاد پیچش نده که انسان هم نتونه بخونه!





md5(mysql_real_escape_string($password));

اینکه md5 میشه ! دیگه چه نیازی هست که escape_string بشه!؟ مگه ما میتونیم به md5 هم چیزی رو تزریق کنیم!!؟!؟!؟


مشکل اینه که با حذف یک رکورد سیستم شماره گذاری بهم میخوره[/QUOT]
این الان دقیقا چه مشکلی داره!؟

[QUOTE]. باز بودن اتصال به MySQL و دیتابیس در طول برنامه اشکالی نداره؟

از وصل شدن های زیاد در طول برنامه بهتر هست!


آیا بعد از اینکه کاربر وارد شد بهتر نیست که اطلاعات ضروری از قبیل را در یک فایل متنی، کوکی، Session ذخیره کرد و یا در همان در جایی تمامی آنها را به صورت Global تعریف کرد و مقدار دهی کرد؟
تو سشن ذخیره کنی بهتر هست ، به نظرم!


آیا راهی برای گفتن توضیحات فیلدها جدول وجود داره؟ مثلا اسم فیلد fname و توضیح First Name
فکر کنم mysql یه جایی داره برای comment گذاری برای جداول یا دیتابیس!


برای نمایش داده ها به جز استفاده از table آیا راه بهتری سراغ دارید؟ لطفا اگر آموزشی سراغ دارید معرفی کنید.
آموزش که زیاده ، table یه کم مشکل داره ، بهتره از div استفاده کنید!


برای امنیت بیشتر چه نکاتی رو باید در نظر داشت؟
کاربر رو یک مریض روانی حساب کن ، هر چی به سمت برنامه میفرسته رو فیلتر کن و چیز هایی که نیاز داری رو اجازه ورود بده ، بقیه رو اجازه نده!

sargardoon
جمعه 27 اسفند 1389, 11:16 صبح
ممنونم دوست عزیز که وقت گذاشتید به سوالاتم پاسخ دادید.

زیاد جالب نیست! مثلا شما میخوای طول رشته رو اندازه بگیری بهتر هست که از strlen یا برای یونیکد از mb_strlen استفاده کنید
فقط زمانی از preg_match استفاده کنید که نام کاربر یا پست الکترونیک باید معتبر سازی بشه! مثلا رشته فقط انگلیسی باشه یا ایمیل درست باشه!
از این الگوها برای ارزیابی استفاده میکنم
نام و آدرس

$pattern = "#^[\s\x{0621}-\x{063A}\x{0640}-\x{0691}\x{0698}-\x{06D2}\x{06F0}-\x{06F9}\x{0661}-\x{0669}0-9\n\r\\'\-\_\.\:\,0-9a-zA-Z]+$#u";


ایمیل
$pattern = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";

وب سایت

$pattern = "#^http(s)?://[a-z0-9-_.]+\.[a-z]{2,4}#i";


:D ، اینطوری اگه به کاربر بگی کلمه عبور تکراری است ، به نظرت امنیت کاربرا پایین نمیاد!؟ حالا ایمیل یه چیزی!
متوجه منظورتون به درستی نشدم؟ من هر دو را باهم چک میکنم که هیچ یک تکراری نباشه.


خوب هست ، اما زیاد پیچش نده که انسان هم نتونه بخونه!
زیاد سخت نیست کدش رو خودم نوشتم شکلش به صورت زیر هستش.
67646


اینکه md5 میشه ! دیگه چه نیازی هست که escape_string بشه!؟ مگه ما میتونیم به md5 هم چیزی رو تزریق کنیم!!؟!؟!؟
پس به نظر شما کار بیخودیه زیاد فرقی نمیکنه؟


مشکل اینه که با حذف یک رکورد سیستم شماره گذاری بهم میخوره
این الان دقیقا چه مشکلی داره!؟
مشکل اینه که اگر بخواهی برای کد گذاری از سیستم Auto Increment استفاده کنی با حذف یک رکورد ترتیب به هم میخوره. سوالم این بود بهتر نیست برای کد (مثل پست، دسته و ...) برای اینکه ترتیب داده باشند خودمون به درست کنیم. مثلا من برای کد کاربری به صورت تصادفی یک عدد 6 رقمی میسازم. ولی برای دیگر موارد نمیخوام تصادفی باشه.


تو سشن ذخیره کنی بهتر هست ، به نظرم!
توی ویژال بیسیک میتونی با تعیین Public از اون در همه پروژه استفاده کنی، آیا برای اینکه بتونی در PHP هم چنانی کاری بکنی در یک فایل مثلا فایلی که function یا اتصال به دیتابیس مینویسی و در تمامی صفحات include میشه به صورت global تعریف کنی و آنجا مقدار دهی کنی؟؟


فکر کنم mysql یه جایی داره برای comment گذاری برای جداول یا دیتابیس!
آره داره ولی نمیدونم چطوری میشه مقدار رو گرفت و نمایش داد مثلا برای گرفتن نام فیلدها مییشه از mysql_field_name استفاده کرد. برای توضیحات چیه؟؟


آموزش که زیاده ، table یه کم مشکل داره ، بهتره از div استفاده کنید!
میشه یه جا رو معرفی کنید؟؟؟؟


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


برای اینکه بخواهیم از id به صورت AI استفاده نکنیم باید چه روش بهتری هست؟ مشکل اینه که با حذف یک رکورد سیستم شماره گذاری بهم میخوره؟ روشی در برنامه ای دیدم که یک جدول به نام (Track Transaction) داشت و آخرین فعالیتهاش رو آنجا به روز میکرد یعنی اینکه آخرین شماره کاربری، آخرین کد دسته و ....
سوال اینجاست که آیا از این روش میشه استفاده کرده؟ راه حل بهتری سراغ داری؟
نظرتون در این رابطه چیه؟؟؟

با هم متشکرم از وقتی که گذاشتید :لبخندساده:

binyaft
جمعه 27 اسفند 1389, 13:03 عصر
از این الگوها برای ارزیابی استفاده میکنم
نام و آدرس
برای نام و آدرس فکر نکنم نیازی به الگو باشه!


متوجه منظورتون به درستی نشدم؟ من هر دو را باهم چک میکنم که هیچ یک تکراری نباشه.
اها! اون درسته ، فکر کردم کل دیتابیس رو چک میکنید :D


پس به نظر شما کار بیخودیه زیاد فرقی نمیکنه؟
بله


مشکل اینه که اگر بخواهی برای کد گذاری از سیستم Auto Increment استفاده کنی با حذف یک رکورد ترتیب به هم میخوره. سوالم این بود بهتر نیست برای کد (مثل پست، دسته و ...) برای اینکه ترتیب داده باشند خودمون به درست کنیم. مثلا من برای کد کاربری به صورت تصادفی یک عدد 6 رقمی میسازم. ولی برای دیگر موارد نمیخوام تصادفی باشه.
ساخت کد تصادفی دست خودتون هست ، اما فکر نمیکنم نیازی به این باشه ، هنوز که مشکلی پیش نیومده!


توی ویژال بیسیک میتونی با تعیین Public از اون در همه پروژه استفاده کنی، آیا برای اینکه بتونی در PHP هم چنانی کاری بکنی در یک فایل مثلا فایلی که function یا اتصال به دیتابیس مینویسی و در تمامی صفحات include میشه به صورت global تعریف کنی و آنجا مقدار دهی کنی؟؟

میشه این کار رو کرد.


آره داره ولی نمیدونم چطوری میشه مقدار رو گرفت و نمایش داد مثلا برای گرفتن نام فیلدها مییشه از mysql_field_name استفاده کرد. برای توضیحات چیه؟؟

فکر نکنم بشه توضیحات رو با PHP کشید بیرون ، اونا فقط برای راحتی و یاد آوری برنامه نویس هست !


میشه یه جا رو معرفی کنید؟؟؟؟
شاید این بتونه کمک کنه!
http://boplo.ir/web-design/html-tables-advantages-disadvantages/


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


برای اینکه بخواهیم از id به صورت AI استفاده نکنیم باید چه روش بهتری هست؟ مشکل اینه که با حذف یک رکورد سیستم شماره گذاری بهم میخوره؟ روشی در برنامه ای دیدم که یک جدول به نام (Track Transaction) داشت و آخرین فعالیتهاش رو آنجا به روز میکرد یعنی اینکه آخرین شماره کاربری، آخرین کد دسته و ....
سوال اینجاست که آیا از این روش میشه استفاده کرده؟ راه حل بهتری سراغ داری؟

بستگی به نیازتون داره ، اما همون AI جواب میده ;)

sargardoon
جمعه 27 اسفند 1389, 15:29 عصر
برای نام و آدرس فکر نکنم نیازی به الگو باشه!
به این دلیل استفاده از اون استفاده میشه که بعضی از حروف رو نمیخواهم داشته باشه و دیگر اینکه از SQL Injection هم جلوگیری بشه البته میشه از mysql_real_escape_string، strip_tags کمک گرفت

بابت معرفی اون لینک و اینکه جواب دادید هم بسیار متشکرم