2013-03-11 94 views
0

我使用jQuery創建了一個AJAX提交表單,並使用PHP處理了表單郵件(這就是您在下面看到的內容。)基於下面的代碼,從AJAX/AJAX接收的內容中跳出超全局$ _POST變量的最佳方法是什麼? jQuery形式?將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 = '<[email protected]>';  
    $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); 
+1

htmlentites($ value)用於回顯任何數據以防止人們提交javascript等。 – Waygood 2013-03-11 17:01:24

+0

您需要做一些防止[電子郵件注入]的工作(http://www.securephpwiki.com/index.php/Email_Injection) 。 – datasage 2013-03-11 17:04:09

回答

0

由於您沒有進行任何數據庫調用,因此可以簡單地將htmlentities函數包裝在變量中。您還可以簡化通過只使用提取功能

<?php 

    extract($_POST); 

    $to = '<[email protected]>';  
    $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); 
+0

我不需要在$ email = $ <='的行上轉義$ email。 $電子郵件。 '>'; – Matt 2013-03-13 01:04:40

0

,如果你想要去除HTML實體的所有輸入也可以使用用strip_tags()函數分配變量後。

strip_tags() Example

0

使用它是一條路可走了精密組件定期expresions,另一種是使用filter_var('[email protected]', FILTER_VALIDATE_EMAIL)就可以了大量的標誌傳遞給filter_var($ _ POST [「內容」],FILTER_SANITIZE_STRING)有充足因此請仔細閱讀文檔,特別注意電子郵件,因爲有人可以注入CC BCC。 htmlentities,htmlcharacters,我的意思是有很多方法來完成這個我可能會使用正則表達式或filter_var。

+0

將htmlentities或htmlcharacters保護我形成一個電子郵件注入? – Matt 2013-03-11 17:28:12