Gizli alanlar php ile işlenir

2 Cevap php

Ben bir CMS için bir tellafriend formu oluşturduk. Ben, ana sayfa adresi, logo bağlantı ve web admin e-posta adresini geçmek böylece ben şeklinde bazı gizli alanları gerekiyor. Ancak, gizli alanların değeri benim posta dosyasına geçmedi. Ayrıca http://www.zoosh.me/tellafriend.php bir hata php var mı veya bir şey benim dosyaları ile yanlış benim web formu deneyebilirsiniz? Ben gerçekten yardım adamlar seviniriz.

Thanks, Ovi

<form id="tellafriend" method="post" action="mail.php">
 <fieldset>
  <img id="telllogo" width="170" alt="Logo" src="/perch/resources/1253956138myself-w170.jpg"/>
  <input width="170" type="hidden" alt="Logo" value="/perch/resources/1253956138myself-w170.jpg" name="logo"/>
  <input type="hidden" value="http://www.zoosh.me" name="webaddress"/>
  <ul class="wrapper">
   <li>
    <label class="label" for="yourname">Your Name:</label>
    <input id="yourname" class="text jquery-live-validation-on invalid" type="text" value="" name="yourname"/>
    <img alt="Invalid" src="images/invalid.png"/>
   </li>
   <li>
    <label for="youremail">Your Email:</label>
    <input id="youremail" class="text jquery-live-validation-on invalid" type="text" value="" name="youremail"/>
    <img alt="Invalid" src="images/invalid.png"/>
   </li>
   <li>
    <label for="friendsname">Friend's Name:</label>
    <input id="friendsname" class="text jquery-live-validation-on invalid" type="text" value="" name="friendsname"/>
    <img alt="Invalid" src="images/invalid.png"/>
   </li>
   <li>
    <label for="friendsemail">Friend's Email:</label>
    <input id="friendsemail" class="text jquery-live-validation-on invalid" type="text" value="" name="friendsemail"/>
    <img alt="Invalid" src="images/invalid.png"/>
   </li>
   <li>
    <label for="message">
     Your Message
     <br/>
     <small id="charLeft">150 Characters left</small>
    </label>
    <textarea id="message" class="jquery-live-validation-on invalid" cols="10" rows="3" name="message"/>
    <img alt="Invalid" src="images/invalid.png"/>
   </li>
   <li class="inputSubmit">
    <input id="submit" class="submit" type="submit" value="Send"/>
   </li>
  </ul>
  <input type="hidden" value="ovime@ovidiust.com" name="adminaddress"/>
 </fieldset>
</form>

İşte formunu işler ve benim ziyaretçinin arkadaşlarıma bir e-posta gönderir mail.php 'yi dosyasının kodudur.

<?php
$yourname = $_POST['yourname'];
$youremail = $_POST['youremail'];
$news = $_POST['news'];
$friendsname = $_POST['friendsname'];
$friendsemail = $_POST['friendsemail'];
$adminemail = $_POST['adminemail'];
$logo = $_POST['logo'];
$webaddress = $_POST['webaddress'];
$subject = "I've found a great website!";
$headers = "From: " . strip_tags($from) . "\r\n";
$headers .= "Reply-To: " . strip_tags($from) . "\r\n";
$headers .= "BCC: contact@handinhandwithgod.com\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

$message = $_POST['message'];


$body="<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title>Zoosh</title>
</head>
<body>
<table width='90%' cellpadding='0' cellspacing='0'>
<tr>
<td align='center' valign='top'>
 <table width='411' cellpadding='0' cellspacing='0'>
  <tr>
   <td><img src='http://recycledoc.com/emails/zoosh_tellafriend/tdbg.png' width='1' height='450' alt='Tdbg'></td>
   <td background='http://recycledoc.com/emails/zoosh_tellafriend/tellafriendbg.jpg' valign='top' style='padding-top:20px; padding-right:20px; padding-bottom:20px; padding-left:20px;'>
    <table width='370' cellpadding='0' cellspacing='0'>
     <tr>
      <td valign='top' width='170' style='padding-right:10px'><img src='"
      . $webaddress . $logo . "' />
      </td>
      <td valign='top' width='190' style='font-family:Helvetica,Arial,Verdana,sans-serif; font-size:12px; color:#555;'>
       <p style='margin-top:0; margin-bottom:0;'>
        <span style='font-weight:bold;'>From:</span>" . $yourname .         "<br>
        <span style='font-weight:bold;'>Email:</span> <a style='text-decoration:none; color:#6927B2;' href='mailto:" . $youremail . "'>" . $youremail . "</a></p>
       <p style='padding-top:200px;'>" . $message .

       "</p>
       <a href='" . $webaddress . "'><img src='http://recycledoc.com/emails/zoosh_tellafriend/visit.png' width='120' height='20' alt='Visit'></a>
      </td>
     </tr>
    </table>
   </td>
  </tr>
 </table>
</td>
</tr>
</table>

</body>
</html>";

if (mail($friendsemail, $subject, $body, $headers)) {
echo "Thank you for telling your friend about my website. <a href='#' id='goback'>Click here</a> to tell another friend.";
} else {
echo "Sorry. There was a problem sending your email. Please try again!";
}

mail($adminemail, $subject, $body, $headers);
mail($youremail, $subject, $body, $headers);

2 Cevap

Formun normal teslim sürecini engellemeyi ve AJAX aracılığıyla göndererek konum:

data: 'yourname=' + yourname + '&youremail=' + youremail + '&friendsname=' + friendsname + '&friendsemail=' + friendsemail + '&message=' + message,

Onlar PHP script varmak değil tabii bu yüzden, logo, webaddress veya adminaddress içermez.

Ayrıca doğru bu değerleri kaçan değil, bu yüzden birisi '&' veya bu alanların birinde diğer özel karakterler içeriyorsa, bu kırarım. Eğer jQuery 'ajax işlevini kullanıyorsanız bu yana, sadece bir arama geçmek ve jQuery sizin için ilgilenelim, encodeURIComponent kullanın, ya da:

data: {'yourname': yourname, ...

Bunun gibi daha kaçan sorunlar vardır.

$headers = "From: " . strip_tags($from) . "\r\n";

Strip_tags burada kullanışlı değildir. Posta başlıklarını düz metin; HTML etiketleri özel bir anlamı var. Ne tehlikeli, ancak, satır atlama olduğunu. Bu, bir saldırganın postaya onlar gibi herhangi bir başlık eklemek, hatta belki birden fazla, tamamen kontrollü-by-saldırgana postalar göndermek için izin verecek.

Sen güçlü bir posta başlığında koyacağınız şey sterilize edilmelidir; Özellikle ASCII olmayan ve kontrol karakterleri elimden gerekir.

  <td valign='top' width='170' style='padding-right:10px'><img src='"
  . $webaddress . $logo . "' />

HTML enjeksiyon. $ Webaddress ve $ logo keyfi HTML ve JavaScript kodu eklemek için saldırganın sağlayan, tırnak içerebilir. Sen htmlspecialchars($s, ENT_QUOTES) her zaman HTML içine metin koymak gerekir.

Bu kullanıcı Bu spam için bir hediye, vb herhangi webaddress, logo, adminaddress, seçmek için izin de tehlikelidir: kendi penis hapları hakkında "Arkadaşını söyle" yerine için webform'u kaçırma, kendi veri ve mesaj sunacaktır ve sunucu yaygın olarak engellendi. Eğer 'bir arkadaşa söyle' özelliği olmalıdır Eğer gerçekten parametreleri izin ne kilitlemek gerekir; sadece gizli bir alana koyarak hiçbir korunmasıdır.

Sizin PHP komut dosyası $ _POST ['adminemail'] erişir, ancak gizli alan adminaddress denir