0

CMS 用のテラフレンド フォームを作成しました。ホームページ アドレス、ロゴへのリンク、および Web 管理者の電子メール アドレスを渡すことができるように、フォームにいくつかの非表示フィールドが必要です。ただし、非表示フィールドの値はメール ファイルに渡されません。私のウェブサイトhttp://www.zoosh.me/tellafriend.phpのフォームを試すこともできます。php にバグがありますか、それともファイルに何か問題がありますか? 皆さんの助けを本当に感謝します。

ありがとう、オヴィ

<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>

これは、フォームを処理して訪問者の友人に電子メールを送信する mail.php ファイルのコードです。

<?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);
4

2 に答える 2

6

フォームの通常の送信プロセスを回避し、AJAX 経由で送信しています。

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

これにはロゴ、ウェブアドレス、または管理者アドレスは含まれないため、もちろん PHP スクリプトには到達しません。

また、これらの値を正しくエスケープしていないため、誰かが「&」を含む場合 またはそれらのフィールドのいずれかに他の特殊文字があると、壊れます。encodeURIComponent、または、jQuery の関数を使用しているため、ajaxルックアップを渡すだけで、jQuery にそれを処理させます。

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

このようなエスケープの問題は他にもあります。

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

ここでは Strip_tags は役に立ちません。メール ヘッダーはプレーン テキストです。HTML タグには特別な意味はありません。ただし、危険なのは改行です。これにより、攻撃者は任意のヘッダーをメールに追加したり、攻撃者によって完全に制御された複数のメールを送信したりすることができます。

メールヘッダーに入れるものはすべて、強力にサニタイズする必要があります。非 ASCII 文字と制御文字は特に削除する必要があります。

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

HTML インジェクション。$webaddress と $logo には引用符を含めることができるため、攻撃者は任意の HTML および JavaScript コードを挿入できます。htmlspecialchars($s, ENT_QUOTES)テキストを HTML に入れるたびに必要です。

また、ユーザーが任意の Web アドレス、ロゴ、管理者アドレスなどを選択できるようにすることも危険です。これはスパマーへの贈り物です。スパマーは独自のデータとメッセージを送信し、Web フォームをハイジャックして、代わりに自分のペニス ピルについて「友人に伝える」ようにします。 、サーバーが広くブロックされている。「友達に教える」機能が必要な場合は、許可されているパラメーターを実際にロックダウンする必要があります。それらを隠しフィールドに置くだけでは保護されません。

于 2009-09-26T12:57:49.883 に答える
1

PHP スクリプトは $_POST['adminemail'] にアクセスしますが、隠しフィールドは adminaddress と呼ばれます

于 2009-09-26T13:01:15.393 に答える