2

Godaddy の「websiteprotection.com」から、Web サイトがいかに安全でないかを示すレポートを受け取り続けるクライアントがいます。

あなたの Web サイトには、悪意のあるコンテンツやスクリプトが含まれていないことを確認するために、訪問者が提供した入力を適切にサニタイズしていないページが含まれています。クロスサイト スクリプティングの脆弱性により、悪意のあるユーザーが別の訪問者のブラウザーで任意の HTML またはスクリプト コードを実行できるようになります。

出力:

この欠陥を検出するために使用されたリクエスト文字列: /cross_site_scripting. nasl.asp 出力: HTTP/1.1 404 Not Found\r Date: Wed, 21 Mar 2012 08:12:02 GMT\r Server: Apache\r X -Pingback:http://CLIENTSWEBSITE.com/xmlrpc.php\r 有効期限: 1984 年 1 月 11 日水曜日 05:00:00 GMT\r キャッシュ制御: キャッシュなし、再検証が必要、最大年齢 = 0 \r プラグマ: no-cache\r Set-Cookie: PHPSESSID= 1jsnhuflvd59nb4trtquston50; path=/\r 最終更新日: 2012 年 3 月 21 日水曜日 08:12:02 GMT\r キープアライブ: タイムアウト = 15、最大 = 100\r 接続: キープアライブ\r 転送エンコード: チャンク\r コンテンツ-タイプ: テキスト/html; 文字セット=UTF-8\r\r

<div id="contact-form" class="widget"><form action="http://​CLIENTSWEBSITE.c
     om/<script>cross_site_​scripting.nasl</script>.asp" id="contactForm"
     meth od="post">

お問い合わせフォームに問題があるようです。連絡先フォームが行うのは、同じページに ajax リクエストを投稿することだけであり、PHP スクリプトがデータをメールで送信します (データベースのものはありません)。

ここにセキュリティ上の問題はありますか?セキュリティスキャナーを満足させる方法についてのアイデアはありますか?

フォームとスクリプトは次のとおりです。

<form action="<?php echo $this->getCurrentUrl(); ?>" id="contactForm" method="post">
    <input type="text" name="Name" id="Name" value="" class="txt requiredField name" />
    //Some more text inputs

    <input type="hidden" name="sendadd" id="sendadd" value="<?php echo $emailadd ; ?>" />
    <input type="hidden" name="submitted" id="submitted" value="true" /><input class="submit" type="submit" value="Send" />
    </form>
    // Some initial JS validation, if that passes an ajax post is made to the script below

    //If the form is submitted
    if(isset($_POST['submitted'])) {

    //Check captcha 
if (isset($_POST["captchaPrefix"])) {

$capt = new ReallySimpleCaptcha();
$correct = $capt->check( $_POST["captchaPrefix"], $_POST["Captcha"] );
if( ! $correct ) { echo false; die(); } else {
$capt->remove( $_POST["captchaPrefix"] );
}

}


$dateon = $_POST["dateon"]; 
$ToEmail = $_POST["sendadd"]; 
$EmailSubject = 'Contact Form Submission from ' . get_bloginfo('title'); 
$mailheader = "From: ".$_POST["Email"]."\r\n"; 
$mailheader .= "Reply-To: ".$_POST["Email"]."\r\n"; 
$mailheader .= "Content-type: text/html; charset=iso-8859-1\r\n"; 

$MESSAGE_BODY = "Name: ".$_POST["Name"]."<br>"; 

$MESSAGE_BODY .= "Email Address: ".$_POST["Email"]."<br>"; 

$MESSAGE_BODY .= "Phone: ".$_POST["Phone"]."<br>"; 

if ($dateon == "on") {$MESSAGE_BODY .= "Date: ".$_POST["Date"]."<br>";}

$MESSAGE_BODY .= "Message: ".$_POST["Comments"]."<br>"; 

mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure"); 

echo true; die(); 


} 
4

3 に答える 3

1

ここで何が起こっているのかよくわかりませんが、データがフォームから "http://website/script.asp" にチェックされずに送られてくることに不満を持っているのでしょうか?

もしそうなら、それはばかげているので、JavaScript やその他のクライアント側のチェックを行うことを選択したとしても、決してそれに依存すべきではないからです。すべてのサニタイズはサーバー側で行う必要があります。

わかりやすくするために、元のスクリプトを投稿していただけますか?

于 2012-03-22T15:47:57.807 に答える
0

<script>cross_site_​scripting.nasl</script>.asp をフォーム (または非表示の要素) に入力してページに表示できるため、セキュリティ上のリスクがあります。これにより、他の Web サイトが任意のコードを Web サイトに挿入できるようになります。お問い合わせフォームを使用しているだけで、ユーザー ログインや Cookie がない場合、これは単なるスパムのリスクです。

(フォームを生成する HTML/PHP を投稿すると、より明確になる可能性があります)

于 2012-03-22T15:49:06.213 に答える
0

電子メール ヘッダーにやみくもに $_POST を使用しているため、スクリプトはすぐに危険にさらされます。これにより、メールのヘッダーを操作してワイルドカード メール アドレスに送信したり、サーバー上のフォームを使用してスパムを送信したりする可能性があります。

HTML のコンテンツ タイプでは、ユーザー入力で実行する必要がhtmlentities()あります (前述のように、電子メール ビューアーで HTML を起動させたくない場合)。

さらに、filter_input()入力している電子メール アドレスが有効であり、ヘッダー インジェクションではないことを確認してください。

http://us2.php.net/manual/en/function.filter-input.php

于 2012-05-01T14:06:39.107 に答える