0

웹 호스팅 서비스에 최근에 게시 한 asp.net MVC 웹 사이트가 있습니다. 거의 모든 것이 훌륭하게 작동하며, msSQL 데이터베이스에서 얻은 정보는 페이지 등에 표시됩니다.하지만 한 가지 문제가 있습니다. 내 웹 사이트에 로그인하려고하면 작동하지 않습니다. 더 자세히 설명하기 전에 사용자 로그인을 인증하는 다음 코드를 살펴 봐야합니다.

public ActionResult Login()
{
    return View();
}

[HttpPost, ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model)
{
    if (ModelState.IsValid)
    {

        if (Repository.AuthenticateLogin(model.Username, model.Password.GetHashCode().ToString()))
        {
            FormsAuthentication.SetAuthCookie(model.Username, false);
            return RedirectToAction("Index", "Home");
        }
        else
        {
            TempData["WrongLogin"] = "The username or password you've entered is wrong. Please try again!";
            return View(model);
        }
    }
    else
    {
        return View(model);
    }
}

그리고 위의 if 문에서 사용되는 AuthenticateLogin (문자열 사용자 이름, 문자열 암호) 메서드는 다음과 같습니다.

public static bool AuthenticateLogin(string username, string password)
    {
        using (var context = new SHultEntities())
        {
            return (from u in context.User
                    where u.Username == username && u.Password == password
                    select u).Any();
        }
    }

이제 알 수 있듯이 사용자를 인증하기 위해 데이터베이스의 사용자 테이블에있는 모든 사용자에 대해 입력 한 사용자 이름과 암호를 확인합니다. 일치하는 경우 메서드는 "true"를 반환하고 그렇지 않으면 "false"를 반환합니다. 그래, 알았다.

음, 문제는 내 사이트에 로그인하려고 할 때 TempData [ "WrongLogin"] 텍스트가 표시된다는 것입니다. 즉, AuthenticateLogin 메서드가 false를 반환했음을 의미합니다. 즉 일치 항목이 없어야합니다. 그러나 동일한 사용자 이름과 암호를 사용하여 내 컴퓨터의 로컬 프로젝트에서이 작업을 시도하면 AuthenticateLogin이 true를 반환합니다.

문제가 데이터베이스에 연결 되었다면 데이터베이스에서 검색 한 헤더와 내용이 사이트에 나타나지 않습니다. 하지만 그렇습니다. 또한 로컬 프로젝트에서 무언가를 업데이트 한 다음 내 웹 사이트를 방문하면 업데이트 된 정보가 나타납니다. 그래서 유일한 문제는 내가 로그인 할 수 없다는 것입니다.

이것은 나를 미치게 만들며 나는 정말로 도움이 될 것입니다.

편집하다:콘텐츠 / 정보를 편집하기 위해 내 웹 사이트에 로그인해야한다는 것을 언급 할 가치가 있습니다. 그래서 로컬 프로젝트에 로그인하여 변경할 수 있다고 말한 다음 변경 사항이 웹 사이트에 표시됩니다.

문제가 생겼습니다.나는 암호를 해시하지 않은 사용자를 생성하고 암호에서 AuthenticateLogin에서 .GetHashCode.ToString ()을 삭제했다. 그런 다음 나는 다시 출판했다. 그것은 작동합니다. 문제는 해싱입니다.

이 문제를 어떻게 해결할 수 있습니까? db에 해시 된 암호가 필요합니다 ...


  • 귀하의 콘텐츠와 신원 정보를 동일한 데이터베이스에 저장합니까, 아니면 2 개의 연결이 정확합니까? - Marco
  • 같은 데이터베이스 (어떤 종류의 명백한) 다른 테이블. - thejokerish
  • 데이터베이스 연결이 설정에 있는지 확인하십시오. - Sudipta Kumar Maiti
  • 당신이 " 확인 " 하지만 로컬에서 업데이트 할 때 DB에서 내 사이트로의 모든 업데이트를 얻었으므로 정확하지 않아야합니까? - thejokerish
  • @ Jokerish 더 나은 접근 방법으로 암호 해시 및 저장을위한 표준 해싱 알고리즘을 사용하면 이러한 컴퓨터 특정 제약 조건을 제거 할 수 있습니다. 또한 강력한 해싱 알고리즘을 선택하고 호스팅 제공 업체에 문의하여 소유하고있는 호스팅 멤버쉽에 대한 해싱을 지원하는지 확인하십시오. - Siva Gopal

2 답변


2

데이터베이스에 사용자 이름과 암호를 어떻게 분류 했습니까? password.GetHashCode ()의 구현이 특정 머신 특정 (즉, 특정 머신 솔트에 의존하는 경우) 이는 모든 사용자와 일치 할 수없는 이유 일 수 있습니다. 반면에 사용자가 원격 (호스트) 환경을 통해 생성 된 경우 문제가되지 않습니다.


  • 내 로컬 프로젝트 내에서 메소드를 사용하여 사용자를 추가했습니다. 첫 페이지의 컨트롤러에서이 메서드를 사용한 다음 프로젝트를 한 번 실행했습니다. 그 다음에이 메소드를 제거하여 페이지에 들어갈 때마다이 작업이 수행되지 않게했습니다. 하지만 그래, 사용자는 내 프로젝트 내에서 만들어졌습니다. - thejokerish
  • 좋아요, 그 소리로는 문제가되는 소금이 아닙니다. 무엇 ' 호스팅 데이터베이스의 데이터 정렬? 사용자 이름의 대소 문자를 구분할 수 있습니까? - CalC
  • 첫 번째 게시물 메이트에서 최신 편집 내용을 확인하고 문제를 발견했습니다. 지금 내 다음 문제를 해결할 필요가 있습니다. - thejokerish
  • 그렇다면 GetHashCode () 구현은 무엇입니까? 게시하거나 표준 프레임 워크 구현일까요? - CalC
  • 우선 암호화 해시의 경우 System.Security.Cryptography.HashAlgorithm 또는 System.Security.Cryptography.KeyedHashAlgorithm 클래스에서 파생 된 클래스를 사용해야합니다. 현재 문제에 관해서는이 게시물을보고 싶을 수도 있습니다.stackoverflow.com/questions/8838053/…. - CalC

0

문제는 내 해싱 때문이었습니다. Apprenatly, 똑같이 보이는 두 개의 문자열은 표준 프레임 워크 구현으로 해시 할 때 다른 값을 생성 할 수 있습니다..GetHashCode (), 다른 컴퓨터에 (심지어 기계가 프레임 워크의 동일한 버전을 사용하고 있더라도).

자세한 내용은,여기를 클릭하십시오!

나는 사용자 정의 해싱 클래스를 사용하여 내 문제를 해결했다.

연결된 질문


관련된 질문

최근 질문