PDA

View Full Version : سوال: نوشتن برنامه به طوری که زیر سیستم ها جدید بدون نیاز به برنامه نویس به برنامه اضافه بشه



hojjatshariffam
سه شنبه 01 مرداد 1392, 00:19 صبح
سلام
من می خوام به برنامه هام قابلیتی رو در کد نویسی اضافه کنم که بعد از اینکه اپلیکیشن دست کابره ، براش بتونم یه زیر سیستم بسازم و کاربر بتونه بدون نیاز به برنامه نویس این زیر سیستم رو به نرم افزار اضافه کنه

یه مثال می زنم
این افزونه های ویژوال استودیو رو دیدین؟
یه افزونه ممکنه اصلا ساخت خود میکرو سافت نباشه ولی وقتی به ویژوال استودیو اضافه میشه هم میتونیم فرم های جدیدی و ببینیم و هم در منو ها یه سری منو های جدید اضافه میشه و ضمن اینکه یه سری کارها تو فرم های اصلی برنامه میتونن انجام بدن
خب این کد های جدی که همراه خود نرم افزار کامپایل نشدن
پس چطوری می تونن به برنامه اظافه بشن


من خودم به یه ایده ای فکر کردم ولی نمی دونم که اصلا قابل پیاده سازی شدن هست یا نه
روشم اینه: برای زیر سیستم جدید(که ممکنه با همون داده های نرم افزار جدید کار کنند و یا اینکه داده های خودشونو داشته باشن و یا هر دو - مثلا با اضافه شدنشون ممکنه نیاز به جدول جدید در دیتا بیس باشه که خودشون می تونن اضافه کنن)
"برای زیر سیستم جدید"من بیام و یه وین اپلیکیشن جدید درست کنم بعد یه کلاس هم براش دست کنم که از تول استریپ منو ارث ببره ، داخل اون منو به فرم ها و رویداد های زیر سیستمم رویداد بنویسم و کل این زیر سیستمم رو یه فایل dll بکنم و اسمشو بزارم مثلا زیر سیستم ایکس
بعد بیام تو نرم افزار اصلی یه کد بنویسم و موقع اجرا ببینه که مثلا اگر در یه فایل xml اسم چه زیر سیستم و dll هایی است. اگر موردی بود یه منو جدید درست کنه و تو ایونت کلیک اون منو اسم زیر سیتم بیاد و اول dll به که خودش یه منو هست به این منوی جدید اضافه بشه (که فکر کنم اینجاش نیاز به کامپایل در زمان اجرا داره)
خب این به فکرم می رسه ولی نمی دونم تا چه حدی قابل پیاده سازی هست
یه روش دیگه هم پیاده سازی در قالب اپلیکیشن های جدا گانه هستش (برا اینم ایده ای ندارم ولی زیادم نمی پسندمش )
حالا نظر دوستان حرفه ای در این مورد چیه؟

shadi khanum
سه شنبه 01 مرداد 1392, 08:13 صبح
روش اولی که گفتی تقریبا همون راهی که سایر نرم افزارها برای افزونه هاشنو استفاده کینن. مثلا VS اعلام میکنه که برای نوشتن افزونه(که مثلا میاد یه menu به VS اضافه میکنه) باید فلان interface رو پیاده سازی کنید. حالا هر شرکتی که بخواد افزونه بنویسه میاد از اون استفاده میکنه

FastCode
سه شنبه 01 مرداد 1392, 09:53 صبح
من چند تا نمونه راجع به روش اتصال گزاشتم.شاید بتونی با گوگل پیدا کنی.
نظر من اینه که روش های مختلف رو آزمایش کنید تا با مشکلاتشون آشنا بشید.
برای این کار توضیح و روش زیاده.ولی خیلی دوست دارم خودت تلاش کنی.که حداقل ۴ تا چیز یاد بگیری.
فقط قبل از اینکه یک برنامه واقعی رو با آزمایش و خطا خراب کنی اینجا بپرس تا اشتباهاتش رو بهت بگم.

hojjatshariffam
سه شنبه 01 مرداد 1392, 14:51 عصر
روش اولی که گفتی تقریبا همون راهی که سایر نرم افزارها برای افزونه هاشنو استفاده کینن. مثلا VS اعلام میکنه که برای نوشتن افزونه(که مثلا میاد یه menu به VS اضافه میکنه) باید فلان interface رو پیاده سازی کنید. حالا هر شرکتی که بخواد افزونه بنویسه میاد از اون استفاده میکنه
اون روش رو پیاده سازی کردم
ولی در مرحله اول باید در زمان کامپایل نرم افزار اصلی باید رفرنش هر یک از زیر سیستم ها رو اضافه کنیم
توضیح: یه اپلیکیشن ویندوزی درست درکدم برای زیر سیستم، یه کلاسم درست کردم که از ToolStripMenuItem ارث می بره و بعد براش DropDownItems اضافه کردم و تو رویداد کلیکشون به فرم های زیر سیستمم ارجاع دادم ، بعد اینکه کل زیر سیستم رو درست کردم و از نظر کد هاش مشکلی نداشت تبدیلش کردم به یه کلاس لایبرری.
تو پروژه اصلیم یه منو درست کردم به اسم زیرسیستم ها ، و بهش یه DropDownItems از نوع زیر سیستمم اضافه کردم
الان می تونم زیر سیستتم رو تغییر بدم و دوباره کامپایل کنم و فقط فایل DLL اون رو بزارم کنار فایل اجرائیم
و کاربر با کلیک روی منوی زیرسیستم ها لیست زیرسیستم هام میاد و وقتی که روشون کلیک می کنم میره و فرم های زیر سیستم رو باز می کنه
فقط مونده اضافه کردن زیر سیستم ها در زمان اجرا
برای این از کامپایل در زمان اجرا می خوام استفاده کنم
از یه فایل لیست زیر سیستم ها و DLL های اونا رو می خوام بخونم و بعد کامپایل کنم اون تیکه کدو
فعلا که یکم کار داره

hojjatshariffam
سه شنبه 01 مرداد 1392, 16:02 عصر
اینو نوشتم و به خوبی به منو هام اضافه شد
حالا فقط کافیه که یه for بزارم و تعداد ردیف هائی که تو یه فایل xml هستش و لیست زیر سیستم های نصب سده همراه آدرس فایل dll اونهاست رو تک به تک بخونه و کامپایل کنه
یه نگاهی بندازین ببینید شما نظرتون چیه؟

private void button1_Click(object sender, EventArgs e)
{
try
{

string source =
@"
using FristSubSystem;
namespace SubSystem
{
public class CreateSubSystem
{
public static FristSubSystem.SubsystemMenu GetMenu()
{
return new SubsystemMenu();
}
}
}";

//تعيين نگارش كامپايلر مورد استفاده
Dictionary<string, string> providerOptions = new Dictionary<string, string>
{
{"CompilerVersion", "v3.5"}
};

//تعيين اينكه كد ما سي شارپ است
CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);

//نحوه تعيين مشخص سازي كامپايل در حافظه
// Build the parameters for source compilation.
CompilerParameters compilerParams = new CompilerParameters
{
GenerateInMemory = true,
GenerateExecutable = false
};
compilerParams.ReferencedAssemblies.Add("System.Dll");
compilerParams.ReferencedAssemblies.Add("System.Windows.Forms.Dll");
compilerParams.ReferencedAssemblies.Add(
@"D:\Users\ArminFelez\Documents\Visual Studio 2010\Projects\Contact\Contact\bin\Debug\FristSubSy stem.dll");

// Invoke compilation.
//عمليات كامپايل در اينجا صورت مي‌گيرد
CompilerResults CompileResults = provider.CompileAssemblyFromSource(compilerParams, source);

String ErrorText = String.Empty;

// اگر خطايي در كامپايل وجود نداشت متد دلخواه را فراخواني مي‌كنيم
if (CompileResults.Errors.Count > 0)
{
// Display compilation errors.
ErrorText = "\n" + string.Format("Errors building {0} \n into {1}",
source, CompileResults.PathToAssembly) + "\n";
foreach (CompilerError ce in CompileResults.Errors)
{
ErrorText += string.Format(" {0}", ce.ToString()) + "\n";
}
}
else
{
ErrorText += string.Format("Source {0} built into {1} successfully.",
source, CompileResults.PathToAssembly);
}

// Return the results of compilation.
if (CompileResults.Errors.Count > 0)
{
MessageBox.Show(ErrorText);
}
else
{
Type type = CompileResults.CompiledAssembly.GetType("SubSystem.CreateSubSystem");
MethodInfo method = type.GetMethod("GetMenu");

var newToolStripItem = (ToolStripItem)method.Invoke(null, null);
subSystemToolStripMenuItem.DropDownItems.Add(newTo olStripItem);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}

hojjatshariffam
سه شنبه 01 مرداد 1392, 18:11 عصر
من چند تا نمونه راجع به روش اتصال گزاشتم.شاید بتونی با گوگل پیدا کنی.
نظر من اینه که روش های مختلف رو آزمایش کنید تا با مشکلاتشون آشنا بشید.
برای این کار توضیح و روش زیاده.ولی خیلی دوست دارم خودت تلاش کنی.که حداقل ۴ تا چیز یاد بگیری.
فقط قبل از اینکه یک برنامه واقعی رو با آزمایش و خطا خراب کنی اینجا بپرس تا اشتباهاتش رو بهت بگم.
میشه بیشتر راهنمائی کنید؟
می مطالب شما رو پیدا نکردم

FastCode
سه شنبه 01 مرداد 1392, 22:27 عصر
یکی از راهنمایی هایی که میتونم بکنم اینه که:
باید حواست باشه چه اطلاعاتی رو در دسترس پلاگین میزاری و چطوری.دسترسی مستقیم داره یا اطلاعات کپی میشه.به دیتابیس دسترسی داره یا فقط میتونه از BAL بخونه؟
سیستمت رو طوری پیاده سازی کنی که در صورت obfuscate کردن برنامه اصلی از کار نیافته.
سیستمت رو طوری طراحی کنی که با تغییر ورژن برنامه تغییر رفتار نده و همیشه کار کنه
سیستمت رو طوری طراحی کنی که بتونی سطح دسترسی هاش رو محدود کنی.

hojjatshariffam
سه شنبه 01 مرداد 1392, 22:59 عصر
یکی از راهنمایی هایی که میتونم بکنم اینه که:
باید حواست باشه چه اطلاعاتی رو در دسترس پلاگین میزاری و چطوری.دسترسی مستقیم داره یا اطلاعات کپی میشه.به دیتابیس دسترسی داره یا فقط میتونه از BAL بخونه؟
سیستمت رو طوری پیاده سازی کنی که در صورت obfuscate کردن برنامه اصلی از کار نیافته.
سیستمت رو طوری طراحی کنی که با تغییر ورژن برنامه تغییر رفتار نده و همیشه کار کنه
سیستمت رو طوری طراحی کنی که بتونی سطح دسترسی هاش رو محدود کنی.
شما که الان اینارو می گین ، من به این نتیجه رسیدم که من چقدر سطحی به این موضوع نگاه می کردم
اولش فکرم این بود که چطور به منو هام اضافه بشه ، خب نتیجشم عالی بود ، خودمم کف کردم وقتی دیدم که چیزی به لیست منو هام اضافه شد که فرم های خودشو داره ، کارای خودشو می کنه.
ولی الان یادم افتاد که باید این با داده ها کار کنه، سطوح دسترسی کاربرام براش تعریف بشه و روش اعمال بشه ، کاربر فعال رو بدونه چیه (البته این میشه پاس داده بشه) و از همه مهمتر اینه که نباید به لایه دیتا اکسسم دسترسی داشته باشه ولی لایه BLL خودشو داشته باشه، و .... (البته اینا کاربردای منه ، یک افزونه و یا زیر سیستم دیگه ممکنه کاربردها و کارایی های خودشو داشته باشه )
نمونه کار نمی تونید معرفی کنید یکم روشون کار و مطالعه کنم؟

UfnCod3r
سه شنبه 01 مرداد 1392, 23:13 عصر
بستگی داره دقیقا بخوای چی کار کنی با یک فایل متنی ساده و چند تا دستور هم میشه کاری کرد که یک سری چیزا ب برنامه اضافه بشه
اما اگه بخوای مثل اکثر نرم افزار ها سیستم پلاگین بنویسی .
یا باید ی زبان اسکریپتی به برنامت اضافه کنی که توسعه دهنده با توابع و .. ای که تحویل می گیره کارا رو انجام بده
یا راه بهترش اینه که ی رابط بین برنامت و پلاگین ها درست کنی بعد طرف میاد از این رابط استفاده می کنه و کد ها رو می نویسه
اکثرا" همین طور هستن
برای اینکار می شه از delegate , virtual function و ... بهره برد

hojjatshariffam
سه شنبه 01 مرداد 1392, 23:41 عصر
بستگی داره دقیقا بخوای چی کار کنی با یک فایل متنی ساده و چند تا دستور هم میشه کاری کرد که یک سری چیزا ب برنامه اضافه بشه
اما اگه بخوای مثل اکثر نرم افزار ها سیستم پلاگین بنویسی .
یا باید ی زبان اسکریپتی به برنامت اضافه کنی که توسعه دهنده با توابع و .. ای که تحویل می گیره کارا رو انجام بده
یا راه بهترش اینه که ی رابط بین برنامت و پلاگین ها درست کنی بعد طرف میاد از این رابط استفاده می کنه و کد ها رو می نویسه
اکثرا" همین طور هستن
برای اینکار می شه از delegate , virtual function و ... بهره برد
خب اگه یه نمونه کوچیک داشته باشم می تونم بهتر درک کنم
از delegate و virtual function در خود پروژه به راحتی می شه استفده کرد ولی وقتی یه فایل dll داری که پروژتو اصلا نمیشناسه (نه به BLL به کلاسهام و ... ) اون موقع چی کار باید بکنیم
البته الان یه فکری که به نظرم می رسه اینه که مثلا لایه BLL و دیتا اکسسم رو حتما در قالب یک یا بصورت مجزا دو تا dll پیاده سازی کنم و اونو به پروژه اصلی اضافه کنم، و هر موقع هم خواستم از زیر سیستمم هم به اونا دسترسی داشته باشم ، به زیرسیستم هم اضافه کنم.

FastCode
چهارشنبه 02 مرداد 1392, 02:39 صبح
واقعا شرمنده که اینطوری میگم ولی چون فکر نمیکنم بیشتر از ۱۰ نفر توی این سایت بتونن سطح دسترسی سمت کلاینت رو درست طراحی کنند پیشنهاد میکنم از روش های آماده سمت سرور مثل سطح دسترسی SQL استفاده کنید.و توی برنامتون برای هر کاربر یک کاربر در بانک اطلاعاتی داشته باشید.
اگر واقعا میخواهید سمت کلاینت باشه و حاضرید براش وقت بزارید و این اطمینان رو به من میدید که وقتم رو تلف نمیکنم حاضرم کامل کامل بهتون آموزش بدم.
برای شروع باید روشها و چارچوب ساخت کتابخانه های common یا مشترک رو یاد بگیرید.
برای نمونه فکر میکنم لایه common ه banshee خوب باشه.خودم نخوندمش ولی با پلاگینهایی که داره فکر میکنم بتونی با یک مقدار مطالعه کلیت موضوع رو درک کنی.

hojjatshariffam
چهارشنبه 02 مرداد 1392, 04:46 صبح
واقعا شرمنده که اینطوری میگم ولی چون فکر نمیکنم بیشتر از ۱۰ نفر توی این سایت بتونن سطح دسترسی سمت کلاینت رو درست طراحی کنند پیشنهاد میکنم از روش های آماده سمت سرور مثل سطح دسترسی SQL استفاده کنید.و توی برنامتون برای هر کاربر یک کاربر در بانک اطلاعاتی داشته باشید.
اگر واقعا میخواهید سمت کلاینت باشه و حاضرید براش وقت بزارید و این اطمینان رو به من میدید که وقتم رو تلف نمیکنم حاضرم کامل کامل بهتون آموزش بدم.
برای شروع باید روشها و چارچوب ساخت کتابخانه های common یا مشترک رو یاد بگیرید.
برای نمونه فکر میکنم لایه common ه banshee خوب باشه.خودم نخوندمش ولی با پلاگینهایی که داره فکر میکنم بتونی با یک مقدار مطالعه کلیت موضوع رو درک کنی.

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

dabirsiaghi
چهارشنبه 02 مرداد 1392, 05:27 صبح
میتونید از MEF برای پلاگین کردن برنامتون استفاده کنید

hojjatshariffam
چهارشنبه 02 مرداد 1392, 13:04 عصر
میتونید از MEF برای پلاگین کردن برنامتون استفاده کنید
منظورتون از MEF
Managed Extensibility Framework
هستش؟
فکر کنم از دات نت 4 به بعد ایجاد شده؟

FastCode
چهارشنبه 02 مرداد 1392, 14:13 عصر
روشهای زیادی برای ایجاد امنیت در سمت کلاینت وجود داره.

۱.Local Data With Encryption
نمونه: TPM
این روش برای کار شما مناسب نیست مگر اینکه Cache ه Local داشته باشید.
خاصیت:جلوگیری از خوانده شدن Cache بدون استفاده از برنامه و رمز

۲.Security Through Obsecurity
نمونه:Code Obfuscation
این روش در برنامه های دات نت کلا جواب نمیده چون بلاخره Decompile میشن.
خاصیت:جلوگیری از کشف ساختار و روش عملکرد برنامه

۳.Key Chain
نمونه:X.509
دسته بندی اطلاعات بر اساس سطح دسترسی و رمزنگاری جدا
خاصیت:استفاده همزمان چند کاربر از سیستم و قابلیت جمع کردن سطح دسترسی چند کاربر

۴.Network Layer Encryption
نمونه:SSL/TLS
جلوگیری از خوانده شدن اطلاعات برنامه توسط برنامه های جاسوس.با این روش برنامه مخرب میتوانند با فرستادن Query های حساب شده به اطلاعاتی که نباید دسترسی پیدا کنند.

۵.Secret Sharing
نمونه:SSSS
قابلیت دادن سطح دسترسی های غیر مجاز به گروهی از افراد در صورت حضور تعداد کافی تعیین شده از افراد.
خاصیت:در برنامه های کاربردی تجاری میتوان در صورت عدم حضور کاربرهای با سطح دسترسی بالا به جمعی از کاربران با سطح دسترسی پایین اجازه فعالیت داد.این روش باعث جلوگیری از دادن سطح دسترسی های نالازم به افراد زیاد میشود.

۶.Data Signing
نمونه:SHA1
قابلیت تشخیص کاربر مسئول تغییر اطلاعات با اطمینان بالا
خاصیت:هیچ قسمتی از اطلاعات پس از ثبت شدن قابل تغییر نخواهد بود.(مناسب برای سیستم های مالی بزرگ و ارگانهایی که منشی و آبدارچی از هم میترسن)

۷.Directory Authentication
نمونه:Kerberos و LDAP
قابلیت دسترسی به اطلاعات کاربر از هر جای شبکه با امنیت مناسب
خاصیت:اطلاعات ورود کاربران مثل KeyChain ها در مکانی امن نگهداری میشوند و احتمال سرقت کلید ها Crack شدنشان به شدت کاهش می یابد.

۸.خسته شدم.قسمت نرمافزاری و کد نویسیش رو بعدا مینویسم.

hojjatshariffam
چهارشنبه 02 مرداد 1392, 14:52 عصر
من تو یکی از برنامه ها برای اینکه داده هام توسط کاربران بعد از ثبت و گذشت چندین ماه بصورت مخفیانه تغییر نکنه، از یه روشی استفاده کردم که نمی دونم روشی استاندارد بوده یه اسمی داره یا نه
و دقیقا هم نمی دونم که به این مبحثمونم ربط داره یا نه ولی توضیح می دمش
برای امنیت داده هام اومدم تو جدول های خاصی که اطلاعات مهم داشتند یه فیلد اضافه کردم به اسم control
تو این فیلد اومدم فیلد هامو با هم ترکیب کردم ، انکریپت کردم بعد تو فیلد اضافه کردم
حالا موقع نمایش دوباره این فیلد رو بدست میارم و اگه با اونی که تو دیتا بیس ذخیره شه یکی نبود ، کلمه اطلاعات فیلد دستکاری شده است رو نشون می دم
نمونه کدش به این صورت بود
public String Control
{
set
{
_Control = value;
}
get
{
String CustomerTemporary = ((_Customer_ID + _Gabz_No) * 54 + 14).ToString();
String GabzTemporary = (((_Gabz_No + _Gabz_Date) - 344) * 3.7).ToString();
String WeightTemporary = (_Milk_Weight / 3 + 274).ToString();
String AsiditeTemporary = (_Asidite + 42).ToString();
String OtherDetailTemporary = ((_Density + 22) + ((_Water_Percent + 2.24) * 3.7 + 45) + (_Protein_Percent + 6.3) + ((_Fat_Percent + 5.42) * 4.4)).ToString();
String HealthTemporary = ((_Milk_Health + 27.2) * 4.3).ToString();

String EncriptionSTR = "abd" + CustomerTemporary.Substring(0, CustomerTemporary.Length - 1)
+ GabzTemporary + "hjmn" + OtherDetailTemporary.Substring(1, OtherDetailTemporary.Length - 1)
+ AsiditeTemporary + HealthTemporary + "bfgb" + WeightTemporary + "dfg" + CustomerTemporary + "dfbv"
+ OtherDetailTemporary + "hgsdhgg" + HealthTemporary + "Software";
String Temp = Encriptions.MD5EncryptString(EncriptionSTR);
return Temp;
}
}

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

Mahmoud Zaad
چهارشنبه 02 مرداد 1392, 16:32 عصر
سلام
از این روش برای تولید بعضی کدها استفاده می شه مثلا در کد ملی، رقم آخر بر اساس یک الگوریتمی تعیین می شه که همانطور که شما هم نوشتید اسمش رقم کنترل هست. توی بارکدهای میله ای هم از این روش استفاده می شه که بهش می گن Checksum.

hojjatshariffam
چهارشنبه 02 مرداد 1392, 17:03 عصر
سلام
از این روش برای تولید بعضی کدها استفاده می شه مثلا در کد ملی، رقم آخر بر اساس یک الگوریتمی تعیین می شه که همانطور که شما هم نوشتید اسمش رقم کنترل هست. توی بارکدهای میله ای هم از این روش استفاده می شه که بهش می گن Checksum.
بله درسته ، کد ملی ، شناسه قبض ، شناسه پرداخت ، شماره شبا در بانک ها و ... هم ازشون استفاده کردن
برای نمونه می تونید به وبلاگ SepehrSoftware.persianblog.ir (http://sepehrsoftware.persianblog.ir/) مراجعه کنید و تولید شبا و شناسه قبض و پرداخت را دانلود کنید

FastCode
چهارشنبه 02 مرداد 1392, 19:21 عصر
طبق معمول پست دادم و ارسال نشد.کلا وقتی زیاد مینویسم این اتفاقات طبیعیه.
خلاصش این بود که:
۱.این روشها خیلی ساده کرک میشن چون ممکنه شخص دیگه ای بتونه راحتتر حلشون کنه.
۲.MD5 امن نیست.
۳.چیزی که من گفتم ربطی به Checksum نداره.
۴.روش استاندارد گرفتن hash اطلاعات با یک الگوریتم بهتر مثل sha256 یا بالاتر و رمز نگاری اون با کلید خصوصی PGP یا RSA کاربر ثبت کننده هست.اینطوری همه میتونن از صحت اطلاعات و شخص/اشخاص ثبت کننده اطلاعات مطمئن بشن.ممکنه در صورت عدم وجود انتروپی کافی از تکنیک های مشابه salting هم استفاده کنید.
اگر سوالی هست در خدمتم.

hojjatshariffam
چهارشنبه 02 مرداد 1392, 22:33 عصر
طبق معمول پست دادم و ارسال نشد.کلا وقتی زیاد مینویسم این اتفاقات طبیعیه.
خلاصش این بود که:
۱.این روشها خیلی ساده کرک میشن چون ممکنه شخص دیگه ای بتونه راحتتر حلشون کنه.
۲.MD5 امن نیست.
۳.چیزی که من گفتم ربطی به Checksum نداره.
۴.روش استاندارد گرفتن hash اطلاعات با یک الگوریتم بهتر مثل sha256 یا بالاتر و رمز نگاری اون با کلید خصوصی PGP یا RSA کاربر ثبت کننده هست.اینطوری همه میتونن از صحت اطلاعات و شخص/اشخاص ثبت کننده اطلاعات مطمئن بشن.ممکنه در صورت عدم وجود انتروپی کافی از تکنیک های مشابه salting هم استفاده کنید.
اگر سوالی هست در خدمتم.
بله درسته ولی یه کاربر معمولی و یا حتی حرفه ای نمی تونه اینا رو حل کنه ، باید برنامه در سطح وسیع گسترش پیدا کنه ، در این صورت باید از این روشها مهاجرت کرد به روشهای بهتر و قوی تر ولی پر هزینه تر چون بطبع سرعت و حافظه و کد بیشتری برای این روش های پیشرفته لازمه و وقت بیشتر برای پیاده سازی.

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

FastCode
پنج شنبه 03 مرداد 1392, 14:27 عصر
بله درسته ولی یه کاربر معمولی و یا حتی حرفه ای نمی تونه اینا رو حل کنه ، باید برنامه در سطح وسیع گسترش پیدا کنه ، در این صورت باید از این روشها مهاجرت کرد به روشهای بهتر و قوی تر ولی پر هزینه تر چون بطبع سرعت و حافظه و کد بیشتری برای این روش های پیشرفته لازمه و وقت بیشتر برای پیاده سازی.

خب بهتره اگه لطف دوستان و اساتید باشه ، بریم سر مبحث اصلی .
سطوح دسترسی در طرف کلاینت
البته همش ۲۰ خط هم نمیشه.
ok.
توجه داشته باشید چون شما هیچ dataای در سمت کلاینت ندارید تقریبا نصف هفت مورد برای شما قابل اجرا نیست.
مثلا همین checksum وقتی کارایی داره که سمت کلاینت باشه.اگر قرار هست که اطلاعات سمت سرور باشه کافیه فقط کد کاربر رو ثبت کنید.چون کلاینت دیگه دسترسی ای بهش نداره و نمیتونه تغییر بده.

برای شروع پیشنهاد میکنم راجع به AppDomain مطالعه کنید.
http://msdn.microsoft.com/en-us/library/system.appdomain.aspx
۴ تا لینک پایین صفحه فراموش نشه.

نمونه های آماده ای هم که پیشنهاد شد رو هم مطالعه کنید مثل MEF و MAF
http://msdn.microsoft.com/en-us/library/bb384200.aspx

و اگر امکان داره پلاگین های مطمئن رو امضا کنید:
http://msdn.microsoft.com/en-us/library/h4fa028b%28VS.80%29.aspx

hojjatshariffam
شنبه 05 مرداد 1392, 15:19 عصر
فعلا دارم AppDomain رو می خونم
اگه رفرنس فارسی آموزشی کسی از اساتید داره لطف کنه
هر موقع تموم کردم نتیحشو اینجا می زارم
ممنون