0

jQuery を使用して AJAX 送信フォームを作成し、PHP でフォーム メーラーを処理します (以下に表示されているものです)。以下のコードに基づいて、AJAX/jQuery フォームから受信したコンテンツからスーパーグローバル $_POST 変数をエスケープする最良の方法は何ですか? ? trim() 関数を htmlspecialchars() 関数でラップしても問題ありませんか? 電子メールの内容がデータベースに挿入されていないため、php メーラーを送信するときにどのような種類のセキュリティを考慮する必要がありますか。

<?php

    $content_link = trim($_POST['content_link']);
    $email = trim($_POST['email']);
    $viewport_size = trim($_POST['viewportsize']);
    $browser = trim($_POST['browser']);
    $os = trim($_POST['os']);
    $current_page = trim($_POST['current_page']);

    $to = '<example@example.com>';      
    $from = '<' . $email . '>';
    $subject = 'Form Submission';   
    $message = '
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head></head>
    <body>
    <table>
        <tr><td>Content Link:</td><td>' . nl2br($content_link) . '</td></tr>
        <tr><td>Email:</td><td>' . $email . '</td></tr>
        <tr><td>Viewport Size:</td><td>' . $viewport_size . '</td></tr>
        <tr><td>Browser/OS:</td><td>' . $browser . '/' . $os . '</td></tr>
        <tr><td>Current Page:</td><td>' . $current_page . '</td></tr>
    </table>
    </body>
    </html>';

    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
    $headers .= 'From: ' . $from . "\r\n";

    mail($to,$subject,$message,$headers);
4

3 に答える 3

0

フィールドで正規表現を使用するのは 1 つの方法ですが、もう 1 つは filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)、filter_var($_POST['content'], FILTER_SANITIZE_STRING) に多くのフラグを渡すことができる使用する方法です。たくさんのフィルターがあるので、ドキュメントを参照してください。誰かが CC BCC を挿入する可能性があるため、電子メールには特に注意してください。htmlentities、htmlcharacters、つまり、これを行う方法はたくさんありますが、おそらく正規表現または filter_var を使用します。

于 2013-03-11T17:16:42.187 に答える
0

データベース呼び出しを行っていないため、変数をhtmlentities関数でラップするだけです。また、抽出機能を使用するだけで、投稿への変数の割り当てを簡素化できます

<?php

    extract($_POST);

    $to = '<example@example.com>';      
    $from = '<' . $email . '>';
    $subject = 'Form Submission';   
    $message = '
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head></head>
    <body>
    <table>
        <tr><td>Content Link:</td><td>' . nl2br(htmlentities(trim($content_link))) . '</td></tr>
        <tr><td>Email:</td><td>' . htmlentities(trim($email)) . '</td></tr>
        <tr><td>Viewport Size:</td><td>' . htmlentities(trim($viewportsize)) . '</td></tr>
        <tr><td>Browser/OS:</td><td>' . htmlentities(trim($browser)) . '/' . htmlentities(trim($os)) . '</td></tr>
        <tr><td>Current Page:</td><td>' . htmlentities(trim($current_page)) . '</td></tr>
    </table>
    </body>
    </html>';

    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
    $headers .= 'From: ' . $from . "\r\n";

    mail($to,$subject,$message,$headers);
于 2013-03-11T17:10:53.557 に答える
0

HTML エンティティのすべての入力を取り除きたい場合は、strip_tags() 関数を使用することもできます。

strip_tags() の例

于 2013-03-11T17:14:42.393 に答える