PDA

View Full Version : امنیت در سایت



ahmad_n80
پنج شنبه 29 شهریور 1386, 13:01 عصر
سلام
من یک سایت درست کردم. یکسری پوشه دارم که میخوام براشون امنیت ایجاد کنم. یعنی فقط کسانی که در سایت عضو شدن شدن بتونن از فایل های داخل پوشه استفاده کنن وکسانی که عضو نشدن نیان زرنگ بازی در بیارن و از طریق address barمسیر پوشه رو بزنن و فایل را دانلود کنن.
من توی فایل web.config از دستورات زیر استفاده کردم:

<location path="foldername">

<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>

</location> ولی نتیجه نداد.شاید باید کارهای دیگه ای هم بکنم.
چه کار کنم؟

hamed_bostan
پنج شنبه 29 شهریور 1386, 14:51 عصر
سلام
من قبلا از همین روش formsAuthentication استفاده کردم . پیشنهاد می کنم روش دیگه ای رو انتخاب کنی چون اخرش پدرتو در میاره

http://barnamenevis.org/forum/showthread.php?t=79488

nazaninam
پنج شنبه 29 شهریور 1386, 16:08 عصر
حامد جان سیستم امنیتی formsAuthentication که در DotNET 1 معرفی شد و در DotNET 2 هم کماکان پا برجاست واقعا حرف نداره ، شما چه بدی ازش دیدی؟

fereshte22
پنج شنبه 29 شهریور 1386, 16:59 عصر
دوست عزیز nazaninam من خودم تصمیم گرفتم که از formautheniticatin استفاده کنم و برای موقعی که خواستم از دو تا صفحه login استفاده کنم و کدهای زیر را در پوشه admin قرار دادم به مشکلات زیادی برخوردم


<locationpath ="Default2.aspx">
<system.web >
<authorization>
<allowusers ="*"/>
</authorization>
</system.web>
</location>
<system.web>
<authenticationmode="Forms">
<formsname="MYWEBAPP.ASPXAUTH"
loginUrl="login.aspx"
protection="All"
path="/"/>
</authentication>
<authorization>
<allowroles="Administrator"/>
<denyusers="?"/>
</authorization>
</system.web>

البته هر کاری هم که بگید کردم از پوشه مجازی ساختن و asp.net configuratin و ..
ولی هنوز این خطا را میگیرد.

It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.

اگر واقعا این formsauthenticationعالی است. پس چرا این مشکل من حل نمیشه.
اگر شما ازش راضی هستید ازتون درخواست میکنم برنامه ای که گذاشتم را اجرا کنید و من را راهنمایی کنید که بدونم مشکلش چیه؟
واقعا کمک بزرگی میکنید

hamed_bostan
پنج شنبه 29 شهریور 1386, 22:08 عصر
منهم با اجازه دهنم سرویس شد . برنامه ام روی سیستم خودم جواب میداد اما روی هیچ سیستم دیگه ای جواب نمی داد . من ispersist رو true گذاشته بودم . فقط روی local جواب می داد . روی سرور هم فقط روی کامپیوتر من چون coockie اون موجود بود والا کوکی رو نمیساخت . روی هیچ سیستم دیگهای . اومدم ispersist رو false کردم درست شد اما به محض بسته شدن browser ...
بعدش هم به هزار تا مشکل دیگه برخوردم .
یه عیب دیگه اش هم اینه که صفحه ای که دسترسی اش بین کاربرای مختلف یا دو نوع رل یکسانه باید در هر دو پوشه کپی بشه که این فقط فضا اشغال میکنه و ...
من دل خوشی ازش ندارم به هر حال و تصمیم گرفتمن فقط کد نویسی کنم واسه رل بیس . همون طور که nazaninam عزیز هم توی اون نظر سنجی نظر دادین به همین منظور اون نظر سنجی رو راه انداختم . اگه توی یه پروژه formauthentication ام اقا بهروز راد به دادم نرسیده بود بیچاره می شدم اخه رو سیستم جواب میداد اما رو هاست... هیچ مشکلی هم نبود نه کوکی ها بسته بود نه ...

hamed_bostan
پنج شنبه 29 شهریور 1386, 22:09 عصر
ضمنا بعضی وقتا هاست ها خاصیت location رو نه تنها غیر فعال میکنن بلکه به دلیل قرار گیری وب دات کانفیگ در زیر شاخه ها تغییرات روی اونها اعمال نیشه و فقط تنظیمات web.config اصلی اعمال میشه که دلیلشم نفهمیدم چیه .

fereshte22
پنج شنبه 29 شهریور 1386, 23:18 عصر
خواهش میکنم دوستان در مورد این مشکلات formauthentication ما را راهنمایی کنند .از یه طرف خیلی ازش تعریف میشود و از طرف دیگر ...ممنون

hamed_bostan
جمعه 30 شهریور 1386, 09:50 صبح
اگر از coockie استفاده کردی که روی کلاینت ذخیره شه حتما حتما حتما برنامه ات رو روی یه چند تا سیستم دیگه که vs و .. نداره تست کن و بعد به کارفرما خبر بده که سایت بالاست. چون رو سیستم من بالا می اومد ولی رو سیستم های دیگه نه

hamed_bostan
جمعه 30 شهریور 1386, 09:53 صبح
مبحث این لطنک هم همینه یه نگاه بنداز :
http://barnamenevis.org/forum/showthread.php?t=69893

nazaninam
جمعه 30 شهریور 1386, 22:50 عصر
ببینید دوستان در اینکه FormsAuthentication دات نت بسیار عالی عمل می کنه هیچ شکی نیست .
هر کاری یک سری اصول داره اگر اصول کار را به درستی رعایت نکنیم دچار مشکل خواهیم شد .




اگر واقعا این formsauthenticationعالی است. پس چرا این مشکل من حل نمیشه.



چون با عجله میخوای به نتیجه برسی و اصول را رعایت نمی کنی .

اون خطایی که شما میبینید هیچ ربطی به FormsAuthentication نداره بلکه مشکل از VirtualDirectori شماست.

hamed_bostan
شنبه 31 شهریور 1386, 09:00 صبح
ببین دوست من این web.config یکی از پروژه های منه که با formsauthentication بود و جواب هم داد و خاصیت location ]م داخلش استفاده شده:




<?xml version="1.0"?>
<!--
Note: As an alternative to hand editing this file you can use the
web admin tool to configure settings for your application. Use
the Website->Asp.Net Configuration option in Visual Studio.
A full list of settings and comments can be found in
machine.config.comments usually located in
\Windows\Microsoft.Net\Framework\v2.x\Config
-->
<configuration>
<appSettings>
<add key="ConnectionInfo" value="server=;UID=;PWD=;Database="/>
</appSettings>
<connectionStrings/>
<system.web>
<!--
Set compilation debug="true" to insert debugging
symbols into the compiled page. Because this
affects performance, set this value to true only
during development.

Visual Basic options:
Set strict="true" to disallow all data type conversions
where data loss can occur.
Set explicit="true" to force declaration of all variables.
-->
<compilation debug="true" strict="false" explicit="true"/>
<pages>
<namespaces>
<clear/>
<add namespace="System"/>
<add namespace="System.Data"/>
<add namespace="System.Data.Sqlclient"/>
<add namespace="System.Collections"/>
<add namespace="System.Collections.Specialized"/>
<add namespace="System.Configuration"/>
<add namespace="System.Text"/>
<add namespace="System.Text.RegularExpressions"/>
<add namespace="System.Web"/>
<add namespace="System.Web.Caching"/>
<add namespace="System.Web.SessionState"/>
<add namespace="System.Web.Security"/>
<add namespace="System.Web.Profile"/>
<add namespace="System.Web.UI"/>
<add namespace="System.Web.UI.WebControls"/>
<add namespace="System.Web.UI.WebControls.WebParts"/>
<add namespace="System.Web.UI.HtmlControls"/>
</namespaces>
</pages>


<authentication mode="Forms">
<forms name="MYWEBAPP.ASPXAUTH" loginUrl="Login.aspx" defaultUrl="default.aspx" protection="All" path="/" timeout="60" />
</authentication>
<authorization>
<allow users="*"/>
</authorization>
<sessionState timeout="20" mode="InProc">
</sessionState>
<customErrors mode="Off"></customErrors>
</system.web>


<location path="Admin" allowOverride="true">
<system.web>
<authorization>
<allow roles="Administrator"/>
<deny users="*"/>
</authorization>
</system.web>
</location>

<location path="Builder" allowOverride="true">
<system.web>
<authorization>
<allow roles="Builder"/>
<deny users="*"/>
</authorization>
</system.web>
</location>

</configuration>



ضمنا من واسه اختصاص رل به کاربرم این کد رو می نوشتم:


Public Function AdminLogin(ByVal USR_NM As String, ByVal USR_PSWD As String) As Boolean
Try
FormsAuthentication.Initialize()

Dim sqlda As New SqlDataAdapter("Login", Con)
sqlda.SelectCommand.CommandType = CommandType.StoredProcedure

sqlda.SelectCommand.Parameters.Add("@USR_NM", SqlDbType.NVarChar).Value = USR_NM
sqlda.SelectCommand.Parameters.Add("@USR_PSWD", SqlDbType.NVarChar).Value = FormsAuthentication.HashPasswordForStoringInConfig File(USR_PSWD, "md5")

Dim ds As New DataSet
sqlda.Fill(ds)

If ds.Tables(0).Rows.Count <> 0 Then

Dim ticket As FormsAuthenticationTicket
If ds.Tables(0).Rows(0).Item("USR_IS_ADMN") = True Then
ticket = New FormsAuthenticationTicket(1, ds.Tables(0).Rows(0).Item("USR_ID") & "-" & ds.Tables(0).Rows(0).Item("USR_RL_NM") & "-Admin", DateTime.Now, DateTime.Now.AddMinutes(20), True, "Administrator", FormsAuthentication.FormsCookiePath)
ElseIf ds.Tables(0).Rows(0).Item("USR_IS_ADMN") = False Then
ticket = New FormsAuthenticationTicket(1, ds.Tables(0).Rows(0).Item("USR_ID") & "-" & ds.Tables(0).Rows(0).Item("USR_RL_NM") & "-Builder", DateTime.Now, DateTime.Now.AddMinutes(20), True, "Builder", FormsAuthentication.FormsCookiePath)
End If

Dim hash As String = FormsAuthentication.Encrypt(ticket)
Dim cookie As New HttpCookie(FormsAuthentication.FormsCookieName, hash)

If ticket.IsPersistent Then cookie.Expires = ticket.Expiration

HttpContext.Current.Response.Cookies.Add(cookie)

Return True
Else
Return False
End If
Catch ex As Exception
Return False
End Try
End Function



البته این کد مال خیلی وقت پیشه و مطمعنا ایراد هایی هم شاید داشته باشه اما خوب واسه من جواب داد و روی هاست هم مشکلی نداشت .

ahmad_n80
شنبه 31 شهریور 1386, 15:42 عصر
nazaninam جان
میشه بگی مشکل من چه جوری با این مسئله حل می شه؟