İyi Formu Güvenlik - hayır CAPTCHA

10 Cevap php

not CAPTCHA olmanız formu güvenliği iyi bir yöntem var mı? CAPTCHA çok can sıkıcı, ama ben form spam alıyorum çünkü güvenlik gerekir. Benim form PHP.

10 Cevap

Try akismet. Spam işaretleme harika bulunuyor. API kullanıcılara kullanımı kolay ve tamamen şeffaftır.

Burada çok etkili (ve ölü basit) bulundu buydu:

  1. Formunuzda bir gizli alan koyun. It "telefon" ya da benzer / ortak ve varsayılan önemsiz bir değer koymak bir şey gibi bir isim verin.

  2. Lütfen form üzerinde başka bir düzenli metin girişi alanını koymak, ancak CSS ile gizlemek. Bu bir boş olun. Yine, o bir "gerçek" sondaj adı (ilk_ad, PHONE_NUMBER, ne olursa olsun) verir.

  3. Form yayınlanmıştır olduğunda, gizli alan hala varsayılan değeri vardır ve CSS ile sakladı alan hala boş olduğunu doğrulayın.

Sen ikonların çoğu spam botlara karşı sadece herhangi gerekli alan doğrulama denetimleri başarısız önlemek için formda her alanı doldurmanız olacağı gerçeği yararlanarak ediyoruz. Bazı gizli alanları göz ardı etmek kadar akıllı olabilir, ama ben CSS ile gizli alanları görmezden kadar akıllı olduğunu hiç görmemiştim.

ETA: To address some comments - Is this a truly "secure" system? no, it certainly isn't. It would be trivially broken by anybody who wanted to specifically target your site. That said, it is still remarkably effective against the automated form spamming bots that most "low value" sites will see.

Eğer kararlı bir saldırganı durdurmak istiyorsanız, biraz daha invaziv bir şey gerekir. Başka bir afiş iyi bir seçenek Akismet, söz. Re-Captcha başka olurdu. Belirlenmiş, hedeflenmiş spam durdurma olsa zordur. Hatta Yahoo ve Google onunla bir zor zaman var.

This kind of validator is cute and quick!

CAT box

Açıkçası, bir çok olası hayvan resimlerden birisini görüntüleyebilir isteyeceksiniz, ve liste de randomize edilmelidir.

Ben sadece zaman X% çalışacaktır anlıyorum, ancak listeye daha fazla seçenek ekleyerek istenmeyen azaltmaya yardımcı olacaktır.

Formu göndermek için zaman insanlık dışı hızlı olsaydı, o zaman muhtemelen bir insan değildi.

Zaten benzer bir şey çalıştım.

  1. Eğer açtığınızda form tek md5 () dize oluşturmak ve (örnek $ _SESSION ['captha'] için) oturumda koydum
  2. Form Semester bir gizli alan varsa ve bu gizli alana $ _SESSION ['captha'] Bu veriler bu formu yazma açtığınızda
  3. Aldığınızda, bu isteği sonrası oturumda ve bu gizli alanı ile geliyor değer değerini karşılaştırmak. Eğer varsa aynı everithing ok ve tersi. Tabii ki, bu isteği işlemek sonra sadece değişken $ _SESSION ['captha'] silin.

Benim için bu iş.

Matematik soruları ilginç bir alternatif vardır. Hatta rasgele sayılar kullanarak kendi basit matematik denetimi yazabilirsiniz.

İşte eklentileri çift vardır:

http://www.codegravity.com/projects/mathguard

http://sw-guide.de/wordpress/plugins/math-comment-spam-protection/

Form spam tipine, bulduğu her tür küfrettiği için yapılan genel botlar kolayca ("bu sitenin adı nedir?" Gibi) çok daha az engelleyici tedbirlerle engellendiğini olabilir, ama birisi yapmış eğer bir bot hedefleme edin Site özellikle size captcha'lar veya eşit sataşmak şey gerekir.

Yapıyorsun tüm spam botlara (formu gönderdikten sonra, tüm <input> alanları doldurun, <form> etiketleri aramaya otomatik programlar) kaçınarak ise, o zaman basit bir çözüm Paolo gibi yapmak dedi ki: Gizli bir alan eklemek için JavaScript kullanın. Dezavantajı JavaScript devre dışı insanlar içindir.

Bunu kullanmak için çekinmeyin:

<form method="post" action="contact.php" id="commentForm">
  <label for="name">Name</label>
  <input type="text" name="name" id="name" maxlength="64" /><br />

  <label for="email">Email</label>
  <input type="text" name="email" id="email" maxlength="320" /><br />

  <label for="message">Message</label>
  <textarea name="message" rows="10" cols="40" id="Message"></textarea><br />

  <label for="human">40 + 2 =</label>
  <input type="text" name="human" id="human" size="10" maxlength="3" /><br />

  <p align="center">
  <input type="submit" name="submit" value="Send" class="submit-button" />
  </p>
</form>

Sonra aynı dizinde "contact.php" olarak aşağıdaki yerleştirin:

<?php
require_once 'lib/swift_required.php';

// Reason for not contacting.
//
$reason = 'default';

error_reporting( 0 );
ini_set( 'display_errors', 0 );

function not_contacted() {
  global $reason;

  header( 'Location: error.html' );
}

function wms_error_handler($errno, $errstr, $errfile, $errline) {
  not_contacted();
  return true;
}

function wms_shutdown() {
  if( is_null( $e = error_get_last() ) === false ) {
    not_contacted();
  }
}

set_error_handler( "wms_error_handler" );
register_shutdown_function( 'wms_shutdown' );

$name = trim( $_POST["name"] );
$email = trim( $_POST["email"] );
$message = trim( $_POST["message"] );
$human = trim( $_POST["human"] );
$subject = 'FormSpam';
$contacted = false;

if( is_null( $name ) || empty( $name ) ) {
  $reason = 'name';
  $human = false;
}
else if( is_null( $email ) || empty( $email ) ) {
  $reason = 'email';
  $human = false;
}
else if( is_null( $message ) || empty( $message ) ) {
  $reason = 'message';
  $human = false;
}
else if( is_null( $human ) || empty( $human ) || $human !== '42' ) {
  $reason = 'computer';
  $human = false;
}

if( $human === '42' ) {
  $subject = 'YourCustomSubject - '.$name;

  $transport = Swift_SmtpTransport::newInstance( 'localhost', 25 );
  $mailer = Swift_Mailer::newInstance( $transport );

  $message = stripslashes( $message );

  $message = Swift_Message::newInstance()
    ->setSubject( $subject )
    ->setFrom( array( $email => $name ) )
    ->setTo( array( 'YourEmailAddress' => 'Your Name' ) )
    ->setPriority( 1 )
    ->setBody( $message )
  ;

  if( $mailer->send( $message ) ) {
    header( 'Location: contacted.html' );
    $contacted = true;
  }
}

if( $contacted === false ) {
  not_contacted();
}
?>

Spam% 99 önlemek gerekir.

Ben sabitleri ekledi değil, ama ben nereye komut dosyasını değiştirmek için anlamaya eminim. Ben (ya da değil) kullanıcı (örneğin, eksik tam adı, e-posta adresi, mesaj ve bu gibi) tarafından girilen ne bağlı olarak farklı sayfalara yönlendirir kısmını kaldırdık. Eğer script tam sürümünü istiyorsanız, lütfen bana bildirin ve ben daha yeni-geliştirici-dostu olmak kodunu düzeltmek olacak.

Swift Mailer bağımlılığı edin.

Düşünün Greylisting.

Spam aşağı kesim acil ihtiyaç ise, bir iframe formu koyarak benim için etkili olmuştur.

<iframe src="contactform.php" scrolling="no" height="*"  width="*"></iframe>

Çerçevenin yüksekliğini ayarlayın ve formun genişliği ve yüksekliğine göre biraz daha büyük genişliği. Böylece kullanıcılar çerçevesinde şeklinde bakıyoruz fark olmaz çerçeve kenarlığını 0 yapmak için CSS kullanın.