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.
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:
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.
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.
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.
Zaten benzer bir şey çalıştım.
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/
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.