PDA

View Full Version : سوال: پست اطلاعات لاگین



ramtinak
یک شنبه 14 شهریور 1395, 21:06 عصر
سلام بنده یک برنامه لاگین با ASP نوشتم اما نمی خواستم که دیزاین داشته باشه برای همین فقط و فقط از سی شارپ استفاده کردم.
در حال حاضر اینطوری کار میکنه:

http://mysite.com/index.aspx?us=Username&pw=Password&do=Login



یعنی بر اساس QueryString داره لاگین میکنه که از لحاظ امنیت بسیار پایین هست.
من می خوام توی کلاینت جای اینکه از url استفاده کنم، اطلاعات رو پست کنم، یعنی:
string formParams = string.Format("us={0}&pw={1}", user, password); formParams = Uri.EscapeUriString(formParams);
byte[] bytes = Encoding.UTF8.GetBytes(formParams);
string address = "http://mysite.com/index.aspx?do=login";
HttpWebRequest request;
request = (HttpWebRequest)WebRequest.Create(address);
request.Method = "Post";
request.ContentType = "application/x-www-form-urlencoded";
if (vars.cookieContainer != null)
request.CookieContainer = vars.cookieContainer;
else
{
vars.cookieContainer = new CookieContainer();
request.CookieContainer = vars.cookieContainer;
}


using (Stream os = await request.GetRequestStreamAsync())
{
os.Write(bytes, 0, bytes.Length);
}

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

mortezagt
دوشنبه 15 شهریور 1395, 06:15 صبح
خوب از session استفاده کن

ramtinak
دوشنبه 15 شهریور 1395, 11:19 صبح
سلام، واسه کسایی که دنبال این هستن.
با استفاده از Request.InputSream میشه اطلاعات پستی رو دریافت کرد(البته اگه از FormData استفاده نشده باشه)
کدی که در formload صفجه asp باید به کار بره:
var sr = new StreamReader(Request.InputStream);
string content = sr.ReadToEnd();
موفق باشید

mortezagt
چهارشنبه 17 شهریور 1395, 07:00 صبح
اساتید این روشی که دوستمون عرض کردن آیا از نظر فشار روی سرور و امنیت بهتر از سیشن هست ؟
اگر ممکنه استادان یه نظری در این خصوص بدن
ممنون

Mahmoud.Afrad
چهارشنبه 17 شهریور 1395, 15:31 عصر
اگر در یک پروژه میخواهید این کار رو انجام بدید، میتونید با ست کردن کوکی و یا سشن و سپس ریدایرکت به صفحه موردنظر (index.aspx) کار رو انجام بدید.
HttpCookie myCookie = new HttpCookie("LoginCookie");
myCookie.Values.Add("username" , "uuuuu");
myCookie.Values.Add("password", "pppppp");
myCookie.Values.Add("do", "login");
Response.Cookies.Add(myCookie);
Response.Redirect("Index.aspx");
در صفحه index کافیه کوکی یا سشن رو در رویداد load صفحه بخونید و عمل لازم رو برای اعتبارسنجی انجام بدید. در صورتی که کاربر مجاز بود، مقدار "do" را از کوکی حذف و کوکی کاربر رو آپدیت کنید
public partial class Index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
HttpCookie loginCookie = Request.Cookies["LoginCookie"];
if (loginCookie!=null)
{
string doAction = loginCookie["do"];
if (doAction != null && doAction == "login")
{
string username = loginCookie["username"];
string password = loginCookie["password"];
// عمل اعتبارسنجی یوزر براساس یوزرنیم و پسورد

if (/* if user is authorized */)
{
loginCookie.Values.Remove("do");
Response.Cookies.Set(loginCookie);

// do what you want
}
}
}
}
}
به جای // do what you want کدی را بنویسید که در صورت لاگین بایست انجام شود.
اگر به پسورد بعدا نیاز ندارید ، پسورد را هم بعد از loginCookie.Values.Remove از کوکی حذف کنید، یا مقدار هش شده را در کوکی قرار بدید.

mortezagt
پنج شنبه 18 شهریور 1395, 12:25 عصر
اگر در یک پروژه میخواهید این کار رو انجام بدید، میتونید با ست کردن کوکی و یا سشن و سپس ریدایرکت به صفحه موردنظر (index.aspx) کار رو انجام بدید.
HttpCookie myCookie = new HttpCookie("LoginCookie");
myCookie.Values.Add("username" , "uuuuu");
myCookie.Values.Add("password", "pppppp");
myCookie.Values.Add("do", "login");
Response.Cookies.Add(myCookie);
Response.Redirect("Index.aspx");
در صفحه index کافیه کوکی یا سشن رو در رویداد load صفحه بخونید و عمل لازم رو برای اعتبارسنجی انجام بدید. در صورتی که کاربر مجاز بود، مقدار "do" را از کوکی حذف و کوکی کاربر رو آپدیت کنید
public partial class Index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
HttpCookie loginCookie = Request.Cookies["LoginCookie"];
if (loginCookie!=null)
{
string doAction = loginCookie["do"];
if (doAction != null && doAction == "login")
{
string username = loginCookie["username"];
string password = loginCookie["password"];
// عمل اعتبارسنجی یوزر براساس یوزرنیم و پسورد

if (/* if user is authorized */)
{
loginCookie.Values.Remove("do");
Response.Cookies.Set(loginCookie);

// do what you want
}
}
}
}
}
به جای // do what you want کدی را بنویسید که در صورت لاگین بایست انجام شود.
اگر به پسورد بعدا نیاز ندارید ، پسورد را هم بعد از loginCookie.Values.Remove از کوکی حذف کنید، یا مقدار هش شده را در کوکی قرار بدید.

ممنون
کار با کوکی منظورم نبود
خواستم بدونم برای ارسال اطلاعات حساس، آیا Request.InputSream امنیت بهتری داره یا سشن .
همونطور که دوستمون توی پست شماره 3 عرض کردن