PDA

View Full Version : سوال: کد کردن کانکشن استرینگ



mehrdad85
سه شنبه 04 مرداد 1390, 12:05 عصر
با سلام

برای بالا بردن امنیت اطلاعات توصیه میشه که کانکشن استرینگ به صورت کد در بیاد

کسی میتونه بیشتر توضیح بده یا نمونه بذاره یا توضیح بده؟


ممنون میشم


مرسی

Saman Hashemi
سه شنبه 04 مرداد 1390, 12:40 عصر
يعني تو وب كانفيگ نباشه؟ خوب توي وب كانفيگ كد شده بذار توي يه كلاس بخون و به حالت استاندارد در بيار توي برنامه ات استفاده كن...!

mehrdad85
سه شنبه 04 مرداد 1390, 13:08 عصر
سلام

دوست عزیز از رانماییت ممنون
اما من متوجه منظورت نشدم
میشه بیشتر توضیح بدی؟
اول اینکه من کانکشن استرینگ را خودم دستی ایجاد نمیکنم و به صورت ویزاردی هنگام استفاده از data source ها اونو ست میکنم
دوم اینکه در مورد کد کردن هم اگه میشه یکم توضیح بدید اگرم سوال دومم نباید داخل این تاپیک مطرح بشه ممنون میشم بهم تذکر بدید تا جابجاش کنم

مرسی

Saman Hashemi
سه شنبه 04 مرداد 1390, 13:48 عصر
با ويزاردي كار نكردم اگه بشه دستي بهش كانكشن داد شما با استفاده از الگوريتم هاي رمزنگاري برگشت پذير كانكشن Encrypt ميكني و ميزاري توي وب كانفيگ بعد توي يه كلاس ميخوني و برميگردوني به حالت اوليه بعد هم اين كانكشن دستي به Datasource (درصورت امكان...!) ميدي...!

Himalaya
سه شنبه 04 مرداد 1390, 18:30 عصر
سلام.
بعد از اینکه Connection String تو web.config قرار گرفت

<div>
<asp:Label ID="lblMess" runat="server" Text=""></asp:Label>
<br /><br />
<asp:Button ID="BtnProtect" runat="server" Text="Protect" onclick="BtnProtect_Click" />
<asp:Button ID="BtnUnProtect" runat="server" Text="UnProtect" onclick="BtnUnProtect_Click" />
<asp:Button ID="BtnShowConnectionString" runat="server" Text="ShowConnectionString" onclick="BtnShowConnectionString_Click" />
</div>


protected void BtnProtect_Click(object sender, EventArgs e)
{
Configuration config = WebConfigurationManager.OpenWebConfiguration(Reque st.ApplicationPath);
ConfigurationSection section = config.GetSection("connectionStrings");

if (!section.SectionInformation.IsProtected)
{
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();
lblMess.Text = "Success Protect. Please review connection string section in web.config";
}
else
lblMess.Text = "connectionStrings section was Protected.";
}

protected void BtnUnProtect_Click(object sender, EventArgs e)
{
Configuration config = WebConfigurationManager.OpenWebConfiguration(Reque st.ApplicationPath);
ConfigurationSection section = config.GetSection("connectionStrings");

if (section.SectionInformation.IsProtected)
{
section.SectionInformation.UnprotectSection();
config.Save();
lblMess.Text = "Success Unprotect. Please review connection string section in web.config";
}
else
lblMess.Text = "connectionStrings section was not protected.";
}

protected void BtnShowConnectionString_Click(object sender, EventArgs e)
{
lblMess.Text = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
}

کانکشن استرینگ بعد از کد شدن توسط دکمه BtnProtect

<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAih2a6ehRxUWM5mFkvc1nmwQAAAACAAAAAAAQZgAAA AEAACAAAABSACgAitYZIfCLM3Y44iP/3xyo3ArrlRh7UXEPep33xQAAAAAOgAAAAAIAACAAAABimucOCc KjISHVZ86fDvJNqqnaiQPjjFYOQyoTnF4y1aABAABby2EKERrh AMua4dYpuDkEovP/6Ew6GJVITz2Ee+Ai0GLArr826XNNcrM6vIyCMqJpDit7y6mwxV GVMCvj2cyOFIo8AQRNGY/fHXHe3/aSXrfSlzYmEwyXKvE6iOqCU0RK0CDXAcxnfvEvYO4k971RmBmj YEKhJr6+lAvMYwwR/vUt/YN1Lc1NMU49rq67po4/d9aLilzFAlvhA62V8pVviOVo9u/hWgraVLAKBC/JIAk6r6no9HycSWEAwlRwTlAFFfHRsPMddls17tjUQD5DhW2sQ o/v1HpCbAZ3JsmdCiKh2m9OtizgnOC0tPC6v/+99KOe+sfnIibvZHLpJAjqGKTgZY45yKflDmNgt6REYpK1/vqDMfuAoo4UIg/I8buF2dnQmmcm3bXYZchv6cnYHi35vmRMbmvsGlioMegPxMZ/z2DJYBpSKoa8IuKsYdNU1Xab+J4ETPSS8R83HZyma3eCBFbP1K mPGUKdg0K/PT3u8C2BRAwYPG44unT+TjZ83wZ1RLLtS+PmZMU6uPr3mAkjC4 XnDL2mrxRhXaG4hUAAAABVvCeLTfqrakHEEnM8pkmV88OcWCW7 5KcSbjq8q3JP3yvkiw8/ojip8xIaEBmS4bARZkgi9V3dRhHZwP7nvTsl</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
که تو هر دو حالت کد شده و نشده، واسه خوندن کانکشن استرینگ، مثل قبل عمل میکنیم. (BtnShowConnectionString)
از طریق خط فرمان هم میتونی کانکشن استرینگ رو کد کنی، واسه دستورش هم تو گوگل بسرچ

mehrdad85
چهارشنبه 05 مرداد 1390, 09:14 صبح
سلام
دوست عزیز قبل از هر چیز لازمه که یه تشکر حسابی ازت بکنم بابت راهنمایی های خوبت
کد های واضح و کاربردیت
ممنون
فقط یه سوال دارم و اون اینکه من یکم سر در گمم
داخل پروژه یه سری data source استفاده کردم و از طریق wizard برای اونا یه connection string ست شده
حالا میخام برای اینکه که امنیت پروژه یکم بیشتر بشه connection string های اونو به صورت کد دربیارم
این کد ها خودشون داخل فایل web.config اون connection string مورد نظر را پیدا میکنن و اونو تغییر میدن و ذخیره میکنن؟
یعنی کارا خیلی راحت کردی دوست من
دیگه نیازی نیست که خودمون از روال های دیگه web.config را بخونیم و ...
؟؟؟
اینطور دستگیر من شده
اگه اشتباه میکنم ممنونت میشم اصلاح کنی

یه سوال دیگه هم داشتم و اون اینکه چه نیازی هست که coonection string ای که اونو کد کردیم دوباره از کد دربیاریم؟

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

Himalaya
چهارشنبه 05 مرداد 1390, 10:49 صبح
سلام

این کد ها خودشون داخل فایل web.config اون connection string مورد نظر را پیدا میکنن و اونو تغییر میدن و ذخیره میکنن؟
دیگه نیازی نیست که خودمون از روال های دیگه web.config را بخونیم و ...تو تگ connectionStrings هر چی کاکشن تعریف شده باشه کد میشه.
راه معمولش توسط کد نویسی اینه. از شیوه های عجیب غریب هم میشه استفاده کرد. ( مثلا فایل web.config رو (که یه فایل با فرمت xml هست) خودت پردازش کن و تغییرات مورد نظر رو بهش اعمال کن. ولی نکته ای که وجود داره اینه که این فایل xml رو (تگ های این فایل رو) توسط کلاس مربوطه میشه مدیریت کرد (مپینگ بین این فایل xml و آبجکت مربوطه)

یه سوال دیگه هم داشتم و اون اینکه چه نیازی هست که coonection string ای که اونو کد کردیم دوباره از کد دربیاریم؟بالاخره هر زهری یه پادزهری هم باید داشته باشه دیگه. مثلا فرض کنید شما User ID خودتون رو میخواید تغییر بدید و دوباره کدش کنید. خوب مطمئنا تو حالت کد شده که نمیتونید خودتون تغییرات مورد نظر رو به کانکشن کد شده، اعمال کنید. 2 تا راه داره.
یا یه بار دیگه connection string رو به صورت نرمال خودتون دستی تو فایل web.config قرار میدید و تغییرات رو بهش اعمال میکنید و دوباره اونو کد میکنید.
یا حالا فرض کنید برنامه شما آپ شده و شما توسط کد نویسی و صفحه مدیریت میخواید این کار رو انجام بدید (نه به صورت دستی). با این روش اول دیکد میکنی و بعد تغییر میدی و دوباره کد میکنی.

اما اگه در مورد رمز کردن با استفاده از خط فرمان هم لینکی دارید یا میتونید راهنمایی کنید...Step3 از این لینک (http://msdn.microsoft.com/en-us/library/ff647398.aspx)

mehrdad85
چهارشنبه 05 مرداد 1390, 11:11 صبح
سلام



بالاخره هر دردی یه پادزهری هم باید داشته باشه دیگه. مثلا فرض کنید شما User ID خودتون رو میخواید تغییر بدید و دوباره کدش کنید. خوب مطمئنا تو حالت کد شده که نمیتونید خودتون تغییرات مورد نظر رو به کانکشن کد شده، اعمال کنید. 2 تا راه داره.

[/URL]

سلام
دوست عزیز واقعا لطف میکنی
ممنون بابت این که وقت میذاری و پاسخ میدی به سوالام

ببینید این صفحات که از نظر امنیتی حساس هستند یعنی صفحاتی که کد میکنن یا دیکد
کجا بذاریم که دست نا اهلش نیافته؟
منظورم اینه این صفحات و کدهاشونو با چی محافظت کنم؟

بازم ممنونم

Himalaya
چهارشنبه 05 مرداد 1390, 12:49 عصر
اون فقط یه مثال بود واسه اینکه بگم دیکد مثلا کجا استفاده میشه.
لازم نیست شما تو پروژت حتما یه همچین چیزی داشته باشی. کانکشن استرینگت رو بعد از اینکه برای اتصال به بانک روی سرور تنظیم کردی، کد کن و دیگه تموم.
اگه خیلی اصرار داری که کد و دیکد کردن بخشهای مختلف web.config رو در اختیار مدیر سایت قرار بدی (که فکر نکنم اصلا نیاز باشه)، مطمئنا کدای مربوطه رو تو صفحه مدیریت قرار میدی

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

Ali_M_K
دوشنبه 06 آذر 1391, 09:42 صبح
سلام
ممنون از karaj1333 بابت راهنماییشون
یه سئوال برام پیش اومده

این فرایند کدینگ و دیکد رو که لازم نیس برای هر اجرای کوئری انجام بدیم. کافیه موقع لود شدن برنامه ؟ یا...

لطفا راهنمایی کنید که چه زمانی باید کد و چی زمانی باید انکود کنیم؟

ممنون

ali9698
دوشنبه 06 آذر 1391, 14:01 عصر
سلام به همه
ممنون از karaji333
منم یه سوال دارم. این کدهایی که نوشتی توی رویداد کلیک گذاشتی. اگه بخوام توی همه صفحه ها اتوماتیک این اتفاق بیفته باید بزارمش توی page_load یا کار دیگه ای بکنم؟

Himalaya
دوشنبه 06 آذر 1391, 16:14 عصر
یه سئوال برام پیش اومده
این فرایند کدینگ و دیکد رو که لازم نیس برای هر اجرای کوئری انجام بدیم. کافیه موقع لود شدن برنامه ؟ یا...
لطفا راهنمایی کنید که چه زمانی باید کد و چی زمانی باید انکود کنیم؟



منم یه سوال دارم. این کدهایی که نوشتی توی رویداد کلیک گذاشتی. اگه بخوام توی همه صفحه ها اتوماتیک این اتفاق بیفته باید بزارمش توی page_load یا کار دیگه ای بکنم؟


سلام. برداشت اشتباه نکنید. اصلا قرار نیست شما تو لود صفحه یا موقع اجرای کوئری یا ... کاری رو کانکشن استرینگ انجام بدید. شما قبل از اینکه سایتی که طراحی کردید رو بزارید رو هاست،
بخش کانکشن استرینگ رو کد کنید. همین. بقیه کار رو بزارید به عهده دات نت
مثلا فرض کنید برنامه رو طراحی کردید و تموم شده، حالا میخواید پابلیشش کنید. فقط قبلش
کدای زیر رو بزارید تو Page_Load صفحه Default.aspx


Configuration config = WebConfigurationManager.OpenWebConfiguration(Reque st.ApplicationPath);
ConfigurationSection section = config.GetSection("connectionStrings");
if (!section.SectionInformation.IsProtected)
{
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();
}

و این صفحه و 1 بار اجرا کنید تا کانکشن استرینگ تو فایل کانفیگ کد بشه. بعد این کدارو از Page_Load حذف کنید و پروژه رو پابلیش کنید.