RSS

zapisz się: RSS Artykuły

szukaj

Domyślny formularz kontaktowy sNews 1.7 umożliwia spamowanie - łatka

Komentarze 0

Czerwony znak spamDosyć niedawno zauważono, że formularz kontaktowy w sNews 1.7 (a także i starszych wersji) umożliwia spamerom wysyłanie spamu dowolnym osobom. Całość spamu idzie wówczas przez nasz serwer. Taka sytuacja sprawia, że nie tylko tracimy na transferze, ale także nasz hostingodawca może zablokować nasze konto.

Łatkę do sNews opracował Joost. Należy wymienić całą funkcję "contact". W takim razie wymieniamy w snews.pl domyślną funkcję:

// CONTACT FORM
 function contact() {
 if (!isset($_POST['contactform'])) {
 echo '<div class="commentsbox"><h2>'.l('contact').'</h2>';
 echo '<p>'.l('required').'</p>';
 echo html_input('form', '', 'post', '', '', '', '', '', '', '', '', '', 'post', _SITE, '');
 echo html_input('text', 'name', 'name', '', '* '.l('name'), 'text', '', '', '', '', '', '', '', '', '');
 echo html_input('text', 'email', 'email', '', '* '.l('email'), 'text', '', '', '', '', '', '', '', '', '');
 echo html_input('text', 'weblink', 'weblink', '', l('url'), 'text', '', '', '', '', '', '', '', '', '');
 echo html_input('textarea', 'message', 'message', '', '* '.l('message'), '', '', '', '', '', '5', '5', '', '', '');
 echo mathCaptcha();
 echo '<p>';
 echo html_input('hidden', 'ip', 'ip', $_SERVER['REMOTE_ADDR'], '', '', '', '', '', '', '', '', '', '', '');
 echo html_input('hidden', 'time', 'time', time(), '', '', '', '', '', '', '', '', '', '', '');
 echo html_input('submit', 'contactform', 'contactform', l('submit'), '', 'button', '', '', '', '', '', '', '', '', '');
 echo '</p></form></div>';
 $_SESSION[_SITE.'contact'] = 0;
 } else {
 $to = s('website_email');
 $subject = s('contact_subject');
 $name = trim($_POST['name']);
 $name = strlen($name) > 1 ? clean(cleanXSS($name)) : null;
 $mail = trim($_POST['email']);
 $mail = (strlen($mail) > 7 && preg_match
 ( '/^[A-Z0-9._-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z.]{2,6}$/i' , $mail)) ? clean(cleanXSS($mail)) : null;
 $url = trim($_POST['weblink']);
 $url = (strlen($url) > 8 && strpos($url, '?') === false) ? clean(cleanXSS($url)) : null;
 $message = trim($_POST['message']);
 $message = strlen($message) > 9 ? stripslashes(cleanXSS($message)) : null;
 $message = strip_tags($message);
 $now = is_numeric($_POST['time']) ? $_POST['time'] : null;
 $ip = (strlen($_POST['ip']) < 16) ? clean(cleanXSS($_POST['ip'])) : null;
 if($_SESSION[_SITE.'contact'] == 0){
 if ($ip == $_SERVER['REMOTE_ADDR'] && (time() - $now) > 4 && $name && $mail && $message && checkMathCaptcha()) {
 echo notification(0,l('contact_sent'),'home');
 $_SESSION[_SITE.'contact'] = 1;
 $send_array = array(
 'to'=>$to,
 'name'=>$name,
 'email'=>$mail,
 'message'=>$message,
 'ip'=>$ip,
 'url'=>$url,
 'subject'=>$subject);
 send_email($send_array);
 } else {
 echo notification(1,l('contact_not_sent'),'contact');
 }
 }
 }
 }
 

na nową funkcję:

// CONTACT FORM
   function contact() {
   if (!isset($_POST['contactform'])) {
   $_SESSION[_SITE.'time'] = $time = time();
   echo
   '<div class="commentsbox"><h2>'.l('contact').'</h2>
   <p>'.l('required').'</p>
   <form method="post" action="'._SITE.'" id="post" accept-charset="UTF-8">
   <p><label for="name">* ',l('name'),'</label>:<br />
   <input type="text" name="name" id="name" maxlength="100" class="text" value="" /></p>
   <p><label for="email">* ',l('email'),'</label>:<br />
   <input type="text" name="email" id="email" maxlength="320" class="text" value="" /></p>
   <p><label for="weblink">',l('url'),'</label>:<br />
   <input type="text" name="weblink" id="weblink"  maxlength="160" class="text" value="" /></p>
   <p><label for="message">* ',l('message'),'</label>:<br />
   <textarea name="message" rows="5" cols="5" id="message"></textarea></p>
   ',mathCaptcha(),'
   <p><input type="hidden" name="ip" id="ip" value="',$_SERVER['REMOTE_ADDR'],'" />
   <input type="hidden" name="time" id="time" value="',time(),'" />
   <input type="submit" name="contactform" id="contactform" class="button" value="',l('submit'),'" /></p>
   </form>
   </div>';
} elseif( isset( $_SESSION[_SITE.'time'] ) ) {
   $count = $magic = 0;
   if( get_magic_quotes_gpc() ){ $magic = 1; }
   foreach($_POST as $k => $v){
   if($count === 8 ) die;
   if( $magic ) $$k = stripslashes($v);
   else $$k = $v;
   ++$count;
   }
   $to = s('website_email');
   $subject = s('contact_subject');
$name = (isset($name[0]) && ! isset($name[300]) ) ? trim($name) : null;
   $name = ! preg_match('/[\\n\\r]/', $name) ? $name : die;
$mail = (isset($email[6]) && ! isset($email[320]) ) ? trim($email) : null;
   $mail = ! preg_match('/[\\n\\r]/', $mail) ? $mail : die;
$url = (isset($weblink[4]) && ! isset($weblink[160]) ) ? trim($weblink) : null;
   $url = ( strpos($url, '?') === false && ! preg_match('/[\\n\\r]/', $url)) ? $url : null;
   $message = (isset($message[10]) && ! isset($message[6000]) ) ? strip_tags($message) : null;
   $time = ( isset($_SESSION[_SITE.'time']) && $_SESSION[_SITE.'time'] === (int)$time && (time() - $time) > 10) ? $time : null ;
   if ( isset($ip) && $ip === $_SERVER['REMOTE_ADDR'] && $time
   && $name && $mail && $message && checkMathCaptcha()) {
   unset($_SESSION[_SITE.'time']);
   echo notification(0,l('contact_sent'),'home');
   $send_array = array(
   'to'=>$to,
   'name'=>$name,
   'email'=>$mail,
   'message'=>$message,
   'ip'=>$ip,
   'url'=>$url,
   'subject'=>$subject);
   send_email($send_array);
   } else {
   echo notification(1,l('contact_not_sent'),'contact');
   }
   }
   }
 

Nowa wersja funkcji "contact" powinna uniemożliwiać wysyłanie spamu poprzez nasz formularz kontaktowy.

Podziel się

Bookmark and Share

Komentowanie zostało zablokowane