2011-12-29 2 views
0

나는 지금까지 아래 양식 확인을 성공적으로 사용 해왔다. 필드, 전자 메일 유효성 검사 및 스팸 허니팟이 필요합니다. 그러나 양식을 전혀 제출하지 않아도 내 고객 중 한 명이 공백 양식 결과를 얻고 있습니다. 어쩌면 나는 명백한 것을 보지 못할 것이다. 내가 생각하기에 아주 간단한 코드입니다. 누구든지 빨리 살펴보고 내가 놓친다면 알려주실 수 있습니까?양식 유효성 검사 및 허니팟 - 내 코드가 맞습니까?

다른 점은 스팸 로봇이 허니팟보다 더 똑똑해 졌습니까?

<script> 
function verify() { 
    var themessage = "You are required to complete the following fields: "; 
    var x=document.form.email.value 
    var atpos=x.indexOf("@"); 
    var dotpos=x.lastIndexOf("."); 

    if (document.form.address.value!="") { 
     themessage = "You are not human! No form for you!"; 
    } 

    if (document.form.first_name.value=="") { 
     themessage = themessage + " - First Name"; 
    } 

    if (document.form.last_name.value=="") { 
     themessage = themessage + " - Last Name"; 
    } 

    if (document.form.email.value=="") { 
     themessage = themessage + " - E-mail"; 
    } 

    if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) { 
     themessage = "You need to enter a valid email address"; 
    } 

    //alert if fields are empty and cancel form submit 
    if (themessage == "You are required to complete the following fields: ") { 
     document.form.submit(); 
    } 

    else { 
     alert(themessage); 
     return false; 
    } 
} 
</script> 

과 HTML : (떨어져 이메일에서) 필드에 공백을 넣는

<form name="form" method="post" action="output.php"> 
    <div id="input"> 
     <div id="field">First Name:</div> 
     <input name="first_name" type="text" id="first_name"> 
    </div> 

    <div id="input"> 
     <div id="field">Last Name:</div> 
     <input name="last_name" type="text" id="last_name"> 
    </div> 

    <div id="input"> 
     <div id="field">Email:</div> 
     <input name="email" type="text" id="email"> 
    </div> 

    <div class="input address"><!-- This is the Honeypot --> 
     <div id="field">Address:</div> 
     <input name="address" type="text" id="address"> 
    </div> 

    <div id="input"> 
     <div id="field">Phone:</div> 
     <input name="phone" type="text" id="phone"> 
    </div> 

    <div id="input"> 
     <div id="field3">Comments:</div> 
     <textarea name="comments" id="comments"></textarea> 
    </div> 

    <input type="button" value="Submit" onclick="verify();"> 
</form> 

답변

0

당신은

+0

전자 메일 필드를 포함하여 양식 결과가 모두 비어 있습니다. 코드 필드에 무언가가 올바르지 않거나 로봇이 더 똑똑 해지고 유효성 검사를 수행 할 방법이 있음을 알립니다. 내 코드에 따르면 이름과 성이 비어 있으면 양식이 통과되지 않아야합니까? – Julesfrog

+0

빈칸으로는 chr (32)을 의미했습니다. 그러나 이메일도 비어 있다면, 나의 의심은 잘못되었습니다. –

+0

입력하신 Eugen을 보내 주셔서 감사합니다. – Julesfrog

0

겉으로는 빈 양식 결과를 생성합니다

은 JS입니다 아마도 양식 데이터에 대한 클라이언트 측 유효성 검사 만 사용하는 것이 좋지 않습니다.

봇은 JavaScript를 실행하지 않으므로 verify 함수를 무시하고 순수 HTML 형식으로 양식을 보내면됩니다.

일반적으로 보안상의 이유와 사용자가 브라우저 설정에서 JavaScript를 비활성화했을 수 있으므로 항상 서버 측 유효성 검사에 우선 순위를 부여해야합니다.

JavaScript에서 이러한 종류의 유효성 검사를 수행하는 것은 유용성을 높이기 위해 선택적 기능이어야하지만 보안 기능 (예 : "허니팟")을 구현해서는 안됩니다.

+0

입력 해 주셔서 감사합니다. 양식 서버 측의 보안을 유지하는 방법에 대한 정보를 얻을 수있는 위치에 대한 권장 사항은 무엇입니까? – Julesfrog

+0

인터넷에 관한 많은 정보가 있습니다. " 입력 확인"을 검색하십시오. OWASP는 [가이드] (https://www.owasp.org/index.php/OWASP_Guide_Project)를 만들었는데, 여기에는 데이터 검증 등에 관한 장이 있습니다. – copy