1

私の仕事は、コンテストのフォームを作成し、データを収集することです。このデータは、私たちが電子メールを送信するために使用する会社によって収集されます(メールチンプを考えてください)。この会社(オンラインソフトウェア「キャンペーンコマンダー」を介した電子メールビジョン)は、以下のフォームを生成しました。ご覧のとおり、キャプチャは検証されません。フォームを離れずにキャプチャを検証するには、どのコードが必要ですか?このサイトはPHPで開発されました。ご協力ありがとうございました。そして神は私たちを祝福してくださいます。ジュリアンP。

                <html>
                <head>
                <title>Webform</title>
                <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
                <script language="javascript">
                function isInteger(input,fieldName){
                var i;
                for(i=0;i<input.value.length;i++){
                var c=input.value.charAt(i);
                if(((c<'0')||(c>'9'))){
                alert('The number in '+fieldName+' is not valid.');
                input.focus();
                return false;
                }}
                return true;
                }
                var dtCh='/';
                var minYear=1900;
                var maxYear=2100;
                function isValidInteger(s){
                var i;
                for(i=0;i<s.length;i++){
                var c=s.charAt(i);
                if(((c<'0')||(c>'9'))) return false;
                }
                return true;
                }
                function stripCharsInBag(s,bag){
                var i;
                var returnString='';
                for(i=0;i<s.length;i++){
                var c=s.charAt(i);
                if(bag.indexOf(c)==-1) returnString+=c;
                }
                return returnString;
                }
                function daysInFebruary(year){
                return(((year%4==0)&&((!(year % 100 == 0))||(year%400==0)))?29:28);
                }
                function DaysArray(n){
                for(var i=1;i<=n;i++){
                this[i]=31;
                if(i==4||i==6||i==9||i==11){this[i]=30;}
                if(i==2){this[i]=29;}
                }
                return this;
                }
                function isDateOK(dtStr){
                if(dtStr=='') return true;
                var daysInMonth=DaysArray(12);
                var pos1=dtStr.indexOf(dtCh);
                var pos2=dtStr.indexOf(dtCh,pos1+1);
                var strDay=dtStr.substring(0,pos1);
                var strMonth=dtStr.substring(pos1+1,pos2);
                var strYear=dtStr.substring(pos2+1);
                strYr=strYear;
                if(strDay.charAt(0)=='0'&&strDay.length>1) strDay=strDay.substring(1);
                if(strMonth.charAt(0)=='0'&&strMonth.length>1) strMonth=strMonth.substring(1);
                for(var i=1;i<=3;i++){
                if(strYr.charAt(0)=='0'&&strYr.length>1) strYr=strYr.substring(1);
                }
                month=parseInt(strMonth);
                day=parseInt(strDay);
                year=parseInt(strYr);
                if(pos1==-1||pos2==-1){
                alert('The date format should be : dd/mm/yyyy.');
                return false;
                }
                if(strMonth.length<1||month<1||month>12){
                alert('Please enter a valid month.');
                return false;
                }
                if(strDay.length<1||day<1||day>31||(month==2&&day>daysInFebruary(year))||day>daysInMonth[month]){
                alert('Please enter a valid day.');
                return false;
                }
                if(strYear.length!=4||year==0||year<minYear||year>maxYear){
                alert('Please enter a valid 4 digit year between '+minYear+' and '+maxYear+'.');
                return false;
                }
                if(dtStr.indexOf(dtCh,pos2+1)!=-1||isValidInteger(stripCharsInBag(dtStr,dtCh))==false){
                alert('Please enter a valid date.');
                return false;
                }
                return true;
                }
                function modifyDateFormat(dt){
                var valuesTable=dt.value.split(dtCh);
                dt.value=valuesTable[1]+dtCh+valuesTable[0]+dtCh+valuesTable[2];
                }
                function isEmail(emailAddress){
                emailAddressValue=emailAddress.value.toLowerCase();
                var countryTLDs=/^(ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cat|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$/;
                var gTLDs=/^(aero|asia|biz|cat|com|coop|edu|geo|gov|info|int|jobs|mil|mobi|museum|name|net|org|post|pro|tel|travel)$/;
                var basicAddress=/^(.+)@(.+)$/;
                var specialChars='\\(\\)><@,;:\\\\\\\"\\.\\[\\]';
                var validChars='\[^\\s'+specialChars+'\]';
                var validCharset='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzöå0123456789\'-_.+';
                var quotedUser='(\"[^\"]*\")';
                var atom=validChars+'+';
                var word='('+atom+'|'+quotedUser+')';
                var validUser=new RegExp('^'+word+'(\.'+word+')*$');
                var symDomain=new RegExp('^'+atom+'(\.'+atom+')*$');
                var matchArray=emailAddressValue.match(basicAddress);
                if(emailAddress.value==''||emailAddress==null){
                return true;
                }
                if(matchArray==null){
                alert('The Email address doesn\'t seem to be correct,\nplease check syntax.');
                emailAddress.focus();
                return false;
                }else{
                var user=matchArray[1];
                var domain=matchArray[2];
                for(i=0;i<user.length;i++){
                if(validCharset.indexOf(user.charAt(i))==-1){
                alert('The Email address contains invalid characters,\nplease check the username.');
                emailAddress.focus();
                return false;
                }
                }
                for(i=0;i<domain.length;i++){
                if(validCharset.indexOf(domain.charAt(i))==-1){
                alert('The Email address contains invalid characters,\nplease check the domain.');
                emailAddress.focus();
                return false;
                }
                }
                if(user.match(validUser)==null){
                alert('The Email address doesn\'t seem to be correct,\nplease check the username.');
                emailAddress.focus();
                return false;
                }
                var atomPat=new RegExp('^'+atom+'$');
                var domArr=domain.split('.');
                var len=domArr.length;
                for(i=0;i<len;i++){
                if(domArr[i].search(atomPat)==-1){
                alert('The Email address doesn\'t seem to be correct,\nplease check the domain name.');
                emailAddress.focus();
                return false;
                }
                }
                if((domArr[domArr.length-1].length==2)&&(domArr[domArr.length-1].search(countryTLDs)==-1)){
                alert('The Email address doesn\'t seem to be correct,\nplease check domain suffix.');
                emailAddress.focus();
                return false;
                }
                if((domArr[domArr.length-1].length>2)&&(domArr[domArr.length-1].search(gTLDs)==-1)){
                alert('The Email address doesn\'t seem to be correct,\nplease check domain suffix.');
                emailAddress.focus();
                return false;
                }
                if((domArr[domArr.length-1].length<2)||(domArr[domArr.length-1].length>6)){
                alert('The Email address doesn\'t seem to be correct,\nplease check domain suffix.');
                emailAddress.focus();
                return false;
                }
                if(len<2){
                alert('The Email address doesn\'t seem to be correct,\nplease check missing hostname.');
                emailAddress.focus();
                return false;
                }
                }
                return true;
                }
                function mandatoryCheckBox(checkBox,fieldName){
                var nbcheck=0;
                if(checkBox.length==undefined){
                if(checkBox.checked){ nbcheck++; }
                }else{
                for (counter=0;counter<checkBox.length;counter++){
                if(checkBox[counter].checked){ nbcheck++; }
                }
                }
                if(nbcheck==0){
                alert('Please select your '+fieldName+'.');
                return false;
                }
                return true;
                }
                function mandatoryDropDown(dropDown,fieldName){
                if(dropDown.options[dropDown.options.selectedIndex].value == ""){
                alert('Please select your '+fieldName+'.');
                dropDown.focus();
                return false;
                }
                return true;
                }
                String.prototype.trim = function() { return this.replace(/^\s*(\b.*\b|)\s*$/, "$1");    }
                function mandatoryText(input,fieldName){
                if(input.value.trim()==''||input==null){
                alert('Please enter your '+fieldName+'.');
                input.focus();
                return false;
                } else {
                return true;
                }
                }
                function validForm(){
                if(!mandatoryText(document.getElementById('FIRSTNAME_FIELD'), 'First name')) return;
                if(!mandatoryText(document.getElementById('LASTNAME_FIELD'), 'Surname')) return;
                if(!mandatoryText(document.getElementById('DATEOFBIRTH_FIELD'), 'Date of birth')) return;
                if(!isDateOK(document.getElementById('DATEOFBIRTH_FIELD').value)) return;
                if(!mandatoryText(document.getElementById('EMAIL_FIELD'), 'Email')) return;
                if(!isEmail(document.getElementById('EMAIL_FIELD'))) return;
                if(!mandatoryText(document.getElementById('EMVCELLPHONE_FIELD'), 'Mobile')) return;
                if(!isInteger(document.getElementById('EMVCELLPHONE_FIELD'), 'Mobile')) return;
                if(!mandatoryDropDown(document.getElementById('STORE_NAME_FIELD'), 'Nearest shop')) return;
                if(!mandatoryCheckBox(document.getElementById('emvForm').OPTIN_FIELD, 'Opt in to marketing emails')) return;
                if(document.getElementById('DATEOFBIRTH_FIELD').value!='') modifyDateFormat(document.getElementById('DATEOFBIRTH_FIELD'));
                document.getElementById('emvForm').submit();
                if(document.getElementById('DATEOFBIRTH_FIELD').value!='') modifyDateFormat(document.getElementById('DATEOFBIRTH_FIELD'));
                }
                </script>
                </head>
                <body>
                <form name="emvForm" id="emvForm" action="http://tre.emv3.com/D2UTF8" method="POST" target="_top">
                <input type="hidden" name="emv_tag" value="876020001C384269" />
                <input type="hidden" name="emv_ref" value="EdX7CqkdLe_d8SA9MOPQNCffL0p6Hq3D-jmueKEyWsbQKbo" />
                <table>
                <tr>
                <td>
                First name
                </td>
                <td>
                <input type="text" id="FIRSTNAME_FIELD" name="FIRSTNAME_FIELD" value="" size="30" maxlength="64">
                </td>
                </tr>
                <tr>
                <td>
                Surname
                </td>
                <td>
                <input type="text" id="LASTNAME_FIELD" name="LASTNAME_FIELD" value="" size="30" maxlength="64">
                </td>
                </tr>
                <tr>
                <td>
                Date of birth
                </td>
                <td>
                <input type="text" id="DATEOFBIRTH_FIELD" name="DATEOFBIRTH_FIELD" value="" size="30" maxlength="64">
                </td>
                </tr>
                <tr>
                <td>
                Email
                </td>
                <td>
                <input type="text" id="EMAIL_FIELD" name="EMAIL_FIELD" value="" size="30" maxlength="64">
                </td>
                </tr>
                <tr>
                <td>
                Mobile
                </td>
                <td>
                <input type="text" id="EMVCELLPHONE_FIELD" name="EMVCELLPHONE_FIELD" value="" size="30" maxlength="64">
                </td>
                </tr>
                <tr>
                <td>
                Nearest shop
                </td>
                <td>
                <select id="STORE_NAME_FIELD" name="STORE_NAME_FIELD">
                <option selected value=""></option>
                <option value="Aberdeen ">Aberdeen </option>
                <option value="Acton ">Acton </option>
                <option value="Aldgate ">Aldgate </option>
                <option value="Ashford ">Ashford </option>
                <option value="Aylesbury ">Aylesbury </option>
                <option value="Baker Street ">Baker Street </option>
                <option value="Balham ">Balham </option>
                <option value="Ballymena ">Ballymena </option>
                <option value="Barnet ">Barnet </option>
                <option value="Beckenham ">Beckenham </option>
                <option value="Belfast ">Belfast </option>
                <option value="Bethnal Green ">Bethnal Green </option>
                <option value="Bexleyheath ">Bexleyheath </option>
                <option value="Biggleswade ">Biggleswade </option>
                <option value="Birmingham ">Birmingham </option>
                <option value="Birmingham New Street ">Birmingham New Street </option>
                <option value="Bishopsgate ">Bishopsgate </option>
                <option value="Bond Street ">Bond Street </option>
                <option value="Bromley ">Bromley </option>
                <option value="Camberwell ">Camberwell </option>
                <option value="Cambridge ">Cambridge </option>
                <option value="Camden Town ">Camden Town </option>
                <option value="Chelmsford ">Chelmsford </option>
                <option value="Chelsea ">Chelsea </option>
                <option value="Cheltenham ">Cheltenham </option>
                <option value="Chester ">Chester </option>
                <option value="Chiswick ">Chiswick </option>
                <option value="Clacton-on-Sea ">Clacton-on-Sea </option>
                <option value="Clapham High Street ">Clapham High Street </option>
                <option value="Clapham Junction ">Clapham Junction </option>
                <option value="Colchester ">Colchester </option>
                <option value="Coleraine ">Coleraine </option>
                <option value="Covent Garden ">Covent Garden </option>
                <option value="Coventry ">Coventry </option>
                <option value="Cricklewood ">Cricklewood </option>
                <option value="Crouch End ">Crouch End </option>
                <option value="Croydon ">Croydon </option>
                <option value="Dalston ">Dalston </option>
                <option value="Ealing ">Ealing </option>
                <option value="Earls Court ">Earls Court </option>
                <option value="Edgware ">Edgware </option>
                <option value="Exeter ">Exeter </option>
                <option value="Farringdon ">Farringdon </option>
                <option value="Fleet Street ">Fleet Street </option>
                <option value="Fulham ">Fulham </option>
                <option value="Glasgow ">Glasgow </option>
                <option value="Godalming ">Godalming </option>
                <option value="Golders Green ">Golders Green </option>
                <option value="Guildford ">Guildford </option>
                <option value="Hackney ">Hackney </option>
                <option value="Hammersmith ">Hammersmith </option>
                <option value="Hampstead ">Hampstead </option>
                <option value="Highbury ">Highbury </option>
                <option value="Holborn ">Holborn </option>
                <option value="Ipswich ">Ipswich </option>
                <option value="Angel ">Angel </option>
                <option value="Kensington ">Kensington </option>
                <option value="Kentish Town ">Kentish Town </option>
                <option value="Kilburn ">Kilburn </option>
                <option value="Kings Lynn ">Kings Lynn </option>
                <option value="Kingston ">Kingston </option>
                <option value="Knightsbridge ">Knightsbridge </option>
                <option value="Leadenhall Market ">Leadenhall Market </option>
                <option value="Lewisham ">Lewisham </option>
                <option value="Lisburn ">Lisburn </option>
                <option value="Lincoln ">Lincoln </option>
                <option value="Londonderry ">Londonderry </option>
                <option value="Luton ">Luton </option>
                <option value="Maidenhead ">Maidenhead </option>
                <option value="Maidstone ">Maidstone </option>
                <option value="Mansion House ">Mansion House </option>
                <option value="Marble Arch ">Marble Arch </option>
                <option value="Marlow ">Marlow </option>
                <option value="Marylebone ">Marylebone </option>
                <option value="Mayfair ">Mayfair </option>
                <option value="Milton Keynes ">Milton Keynes </option>
                <option value="Muswell Hill ">Muswell Hill </option>
                <option value="Newbury ">Newbury </option>
                <option value="Northampton ">Northampton </option>
                <option value="Norwich ">Norwich </option>
                <option value="Notting Hill Gate ">Notting Hill Gate </option>
                <option value="Oxford ">Oxford </option>
                <option value="Peckham ">Peckham </option>
                <option value="Peterborough ">Peterborough </option>
                <option value="Pimlico ">Pimlico </option>
                <option value="Portobello ">Portobello </option>
                <option value="Putney ">Putney </option>
                <option value="Queensway ">Queensway </option>
                <option value="Reading ">Reading </option>
                <option value="Richmond ">Richmond </option>
                <option value="Romford ">Romford </option>
                <option value="Shepherds Bush ">Shepherds Bush </option>
                <option value="Slough ">Slough </option>
                <option value="Soho ">Soho </option>
                <option value="South Kensington ">South Kensington </option>
                <option value="Southend ">Southend </option>
                <option value="St Johns Wood ">St Johns Wood </option>
                <option value="Staines ">Staines </option>
                <option value="Streatham ">Streatham </option>
                <option value="Surbiton ">Surbiton </option>
                <option value="Sutton ">Sutton </option>
                <option value="Swiss Cottage ">Swiss Cottage </option>
                <option value="Sydenham ">Sydenham </option>
                <option value="Tooting ">Tooting </option>
                <option value="Tottenham Court Road ">Tottenham Court Road </option>
                <option value="Tunbridge Wells ">Tunbridge Wells </option>
                <option value="Twickenham ">Twickenham </option>
                <option value="Uxbridge ">Uxbridge </option>
                <option value="Victoria ">Victoria </option>
                <option value="Walthamstow ">Walthamstow </option>
                <option value="Walworth Road ">Walworth Road </option>
                <option value="Wandsworth ">Wandsworth </option>
                <option value="Watford ">Watford </option>
                <option value="Welwyn Garden City ">Welwyn Garden City </option>
                <option value="Westminster ">Westminster </option>
                <option value="Wimbledon ">Wimbledon </option>
                <option value="Windsor ">Windsor </option>
                <option value="Wokingham ">Wokingham </option>
                <option value="Wood Green ">Wood Green </option>
                <option value="Woolwich ">Woolwich </option>
                </select>
                </td>
                </tr>
                <tr>
                <td>

                </td>
                <td>
                <input type="hidden" id="STORE_EMAIL_FIELD" name="STORE_EMAIL_FIELD" value="">
                </td>
                </tr>
                <tr>
                <td>

                </td>
                <td>
                <input type="hidden" id="WEB_HOME_FIELD" name="WEB_HOME_FIELD" value="">
                </td>
                </tr>
                <tr>
                <td>

                </td>
                <td>
                <input type="hidden" id="SOURCE_FIELD" name="SOURCE_FIELD" value="St Petes">
                </td>
                </tr>
                <tr>
                <td>
                Opt in to marketing emails
                </td>
                <td>
                <input type="checkbox" id="OPTIN_FIELD" name="OPTIN_FIELD" value="true">
                </td>
                </tr>


                <tr>
                    <td style="border:1px solid red">
                    <img id="captcha" src="/maininc/securimage/securimage_show.php" alt="CAPTCHA Image" />
                    </td>
                    <td>
                    <input type="text" name="captcha_code" size="10" maxlength="6" />
                <a href="#" onclick="document.getElementById('captcha').src = '/maininc/securimage/securimage_show.php?' + Math.random(); return false">[ Different Image ]</a>

                    </td>
                </tr>



                <tr>
                <td colspan="2" align="center">
                <input type="button" value="Submit Form" onClick="javascript:validForm();">
                </td>
                </tr>
                </table>
                </form>
                </body>
                </html>
4

2 に答える 2

1

キャプチャの検証は、いくつかの正当な理由により、クライアント側で実行されません。

  1. クライアントはJSを無効にすることができます
  2. クライアントに送信したコードはすべてユーザーに表示されるため、ボットがキャプチャコンテンツを取得してサイトにスパムを送信するのにそれほど時間はかかりません。
  3. JS検証だけでは決して十分ではありません

貼り付けたコードが実際に会社が「販売」しているものである場合は、別のサプライヤーを探してください(正直言って、それは悪いコードです)。
フォームを送信せずにキャプチャを検証するためにできることは、AJAXリクエストを送信することだけですが、注意してください。つまり、ボットは、キャプチャ以外のデータを送信しなくても、リクエストを送信して即座にフィードバックを受け取るたびに、ランダムな文字列を自由に試すことができます。

はい、キャプチャは煩わしく、面倒で、ユーザーエクスペリエンスを台無しにし、私たち全員を怒らせることができますが、必要な悪です。キャプチャをそのままにして、フォームと一緒に送信し、ユーザーがキャプチャを理解できるようにしてください。

于 2012-11-30T17:48:21.070 に答える
0

「フォームを離れずにCAPTCHAを検証する」とはどういう意味ですか?とにかく、サーバーに送信するデータのフォームを送信する必要があるので、それを検証するだけです。事前検証の子供を追加して、正しい答えが提供されるようにすることもできますが、決定されたスパマーはクライアント側の検証を削除できます。CAPTCHAが提供する利点を得るには、サーバー側の検証を行う必要があります。

CAPTCHAの画像制作は機能していますか?CAPTCHAの背後にある大きな問題は、人間にはほとんど読めるがコンピューターOCRには難しい単語や数字の画像を生成し、ユーザーが入力した画像がそれらの画像と一致することを検証できることです。あなたがその分野に不慣れであるならば、それはあなたがあなた自身ですることができるであろうことではありません。

CAPTCHAイメージをまだ作成していない場合は、CAPTCHAサービスプロバイダーをオンラインで検索してください。captchas.netのような無料のものもあります(品質や信頼性を保証することはできませんが)。

また、CAPTCHAを含まないスパムを削減または排除するために実行できる対策があることを付け加えたいと思います。

  • フォームに、現在のセッションに固有の値を含む非表示フィールドが表示されていることを確認してください。自動スパマーはフォームをスクレイプする必要があります。
  • 短い間隔でCookieを設定し、Cookieがなくなったかどうかを確認します。そうでない場合は、実際のブラウザの実際のユーザーではありません。
  • サブドメインにCookieを設定し、同じトップレベルドメインの別のサブドメインからCookieにアクセスできるかどうかを確認します。可能であれば、それは実際のブラウジングユーザーではありません。
  • javascriptにかなり複雑な計算(正しい答えをすでに知っている)を実行させ、非表示のフォームフィールドに答えを送信させます。計算と実行するコードを変更すると、誰かがサイトに対して自動化するのが非常に困難になる可能性があります。
  • サイトへの接続試行を制限します。特に、誰かが記入に少なくとも1分かかるフォームを要求した場合、1分未満の投稿を受け入れないでください。
  • 実際、これまでのすべてのアイデアについては、スパマーをブロックする代わりに、投稿を受け入れますが、それが非本物のブラウザーまたはスパムとして分類されている場合は、元のIPアドレス/ユーザーにのみ表示します。彼は投稿が他の人に表示されていないことに気付かないかもしれません、そしてこのフィードバックの欠如はあなたのサイトをスパムする彼の努力を妨げるでしょう。
  • 5つの送信ボタンを提供しますが、CSSを使用して1つを除くすべてを非表示にします。正しいものをクリックするようにしてください。フォームが要求されるたびに異なるコードが含まれるようにしてください。スパマーはCSSルールを解析して、どのルールが表示されているかを確認する必要があります。
  • フォームターゲット、フォーム名、フォーム要素名、およびサイトの基本的なhtml構造をゆっくりと回転させます(最終結果を変更しない方法で)。回転が速すぎると、スパマーはあなたが何をしているかを理解します。ローテーションが数日おきの場合、スパマーはサイトのスクリプトを正常に作成し(他のハードルを乗り越えたと想定)、次に進みます。しかし、その後、すべてを切り替えると、彼のスクリプトが壊れます。
  • フォームを提示しますが、その後ajaxを1分に1回使用して、新しい非表示のフォーム値を取得します。値を返すだけでなく、フォームを更新するために実行されるjavascriptを返します。進取の気性に富んだ自動スパマーは、JSONまたはjavascriptを解析して、フォームに適切な値を適切なタイミングで送信する方法を理解するように強制されます。もちろん、サーバー側では、フォームが送信された時点で正しい値を持っていることが期待されます。
  • javascriptを使用して、フォーカスを受け取るコントロールを記録します。成功するために、ユーザーに送信したい各フォームフィールドをクリックさせます。ブラウザが不完全なフォームデータを保存したユーザーは不便かもしれませんが、サイトを通常どおりに使用し、フォームにデータを入力して送信するだけのユーザーは不便です。
  • ブラウザ以外のスクリプトによって除外される有効なリクエストヘッダーを探します。リクエストヘッダーが意味をなさない場合は、より高い標準のフォーム検証(キャプチャなど)を適用します。
  • リダイレクトを使用して、スパマーがリダイレクトをサポートする必要があることを確認します。
  • 全体として、サイトにスパムを送信しようとするカスタムコードで問題が発生するように、基準を引き上げることができるすべてのことを実行してください。実際のユーザーの使いやすさを維持するために特別な措置を講じる必要があるかもしれませんが、それは可能だと思います。

PSあなたの質問のメールアドレスの検証は良くありません。これにより、完全に有効な多くの文字が使用されなくなります。たとえば、住所の名前の部分では、文字や数字よりもはるかに多くの文字を使用できるようにする必要があります。特に、+有効なキャラクターであり、多くの人が使用しています。ユーザーにはそれを行わないでください。

于 2012-11-30T17:48:06.077 に答える