2010-06-28 2 views
2

Google 웹 사이트에서 간헐적 인 문제가 발생합니다. 내 양식 방식이 POST 일 때 GET을 통해 양식을 제출하려는 사용자가 있습니다. 오류는 항상 IE 사용자가옵니다. 몇 가지 UA 문자열에 "yie8"에 대한 참조가 있다는 것을 알았습니다. 여기에는 Yahoo의 IE8 패키지가 있다고 가정합니다. 나는 야후! 툴바는 저에게 맞지 않을 수 있지만 툴바가 설치된 IE7에서 문제를 재현 할 수는 없습니다. 이 문제는이 폼뿐만 아니라, 많은 것들이 jQuery 폼 플러그 인 load() 함수를 사용하여 Ajax를 통해 제출 된 객체 매개 변수와 함께 발생합니다. 이 예제는 그 중 하나가 아닙니다.내 양식 메소드가 POST 일 때 GET을 요청하는 사용자

간단히 말해서 내 AcceptVerb() 속성을 모두 꺼내는 것이 좋겠지 만 이는 완전히 절름발이입니다. 누구나 이런 식으로 뭔가를 발견하거나 그것을 다루는 아이디어가 있습니까?


다음은 예외 로그 항목의 예입니다.

We've got a Web problem! Exception thrown: 
http://my.web.site/User.mvc/ResetPassword 
Method: GET 

User: <not logged in> 
UserAgent: IE 7 (Mozilla/4.0 (compatible; MSIE 7.0;Windows NT 5.1;.NET CLR 1.1.4322;.NET CLR 2.0.50727;.NET CLR 3.0.04506.30)) 

Exception: System.Web.HttpException 
Message: A public action method 'ResetPassword' could not be found on controller 'MyApp.Controllers.UserController'. 

다음은 브라우저에 렌더링되는 HTML입니다.

<form action="/User.mvc/ResetPassword" class="standard-form small-form" method="post"> 
    <fieldset> 
     <div class="row"> 
      <label for="usernameTextBox">User Name</label> 
      <input type="text" name="username" id="usernameTextBox" /> 
     </div> 
     <div class="row"> 
      <label for="emailTextBox">Email Address</label> 
      <input type="text" name="email" id="emailTextBox" /> 
     </div> 
     <div class="row"> 
      <label>&nbsp;</label> 
      <input type="submit" value="Reset Password" /> 
     </div> 
    </fieldset> 
</form> 

다음은 내 ResetPassword 작업의 서명입니다.

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult ResetPassword(string username, string email) 

(그리고 예, 이메일 주소는 우리가 파일을 가지고있는 하나와 일치해야합니다) 당신이 이것에 대해 아무것도 할 수 있다고 생각하지 않습니다

답변

1

아마도 실제 답변보다 더 많은 질문을 제기하는 답변 일 수도 있지만 도와 드리려고 노력하는 정신이 있습니다 ...

GET 호출에서 "사용자 이름"및 "이메일"쿼리 문자열 매개 변수가 실제로 제공됩니까? (IIS 로그 파일에 쿼리 문자열이 기록 될 수 있으므로 확인하십시오). 그렇다면 벤 S의 답이 잘 적용될 수 있습니다.

귀하의 웹 사이트가 인터넷을 향하고 있다면, 이러한 호출은 단지 거미줄이 좋지 않을 수 있습니다.

사이트가 내부 사이트 인 경우 사용자가 "새로 고침"을하는 것으로 의심됩니다.

이러한 오류가 발생하는 클라이언트 IP 주소를 추적 했습니까?

+0

예외 로그에는 전달 된 매개 변수도 표시됩니다. 종종, 아무도 없습니다. 이 특별한 오류에서 실제로 IE7로 위장한 봇이었을 수 있습니다. 로그인/재설정 패스를 제외한 모든 작업은 보호되므로 봇은 들어올 수 없습니다. 우리는 인증 된 페이지에서도이를 볼 수 있지만 실제 양식 제출을 수행하는 jQuery 양식 플러그인을 사용하고 있습니다. 그것은 별도의 질문 일 수 있습니다. –

+2

하, IP 추적에 머리를 올려 주셔서 감사합니다. http://69.84.207.147/ (링크 안전) –

+0

아 - 좋은 ol 'lightspeed. 그것은 모든 오류에 책임이 있습니까? –

1

합니다. 일부 브라우저 플러그인/도구 모음에는 GET -> POST 및 GET -> POST에서 양식을 변경할 수있는 기능이 있습니다.

사용자가이 작업을 수행하는 경우 실제로 수행 할 수있는 작업이 없습니다.

+0

아마도 맞을 수도 있습니다. "일반 사용자"가 할 수있는 도구 모음의 종류는 무엇입니까? 적어도이 문제를 다루는 나의 오류 페이지에 간단한 "도움말"섹션을 컴파일하고 싶습니다. –

0

나는 그것이 정말로 당신의 문제가 아니라고 말하고 싶습니다. 의도 한대로 작동하도록 사이트를 설계하면 보안 또는 다른 이유로 GET/POST 제한을 메소드에 적용합니다.

사용자가 일부 고급 도구/플러그인 (예 : GET/POST 스위치)으로 보안을 시도하는 경우 걱정할 필요가 없습니다. 그러나 사용자 정의 오류 페이지를 추가하여 해당 시나리오를 처리하고 이에 따라 사용자에게 경고 할 수 있습니다.

1

웹 사이트 방문자가 이와 같이 잘못 행동하면 "정당한 오해 일 가능성은 얼마나됩니까?"라고 자문해야합니다. 내 의견으로는, 틀린 HTTP 방법을 사용하는 것은 오래된 브라우저 나 버그가 있거나 무엇이든간에 브라우저가하는 것이 아닙니다. 잘못된 요청이므로 'a a 405'를 보내고 처리하십시오.

는 (I 일부 브라우저 및 현재 페이지에서 도달 할 수있는 '프리로드'페이지에 노력하고 플러그인의 들었지만, 그것은 절름발이 '기능'이다. 내 대답은 잘못된 요청으로 취급하는 아직도있다.)

+0

미리로드하는 것은 흥미로운 방향입니다. 다행히도 우리 사업은 고객에게 전화를 걸어 실제로 이러한 오류가 발생하는지 또는 침묵 오류인지 확인하는 방식으로 구성됩니다. –

관련 문제