我使用jQuery创建了一个AJAX提交表单并使用PHP处理表单邮件程序(这是您在下面看到的。)基于以下代码,从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 = '<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);
答案 0 :(得分: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);
答案 1 :(得分:0)
如果要删除HTML实体的所有输入,也可以使用strip_tags()函数。
答案 2 :(得分:0)
在feilds上使用常规表达是一种方法,另一种是使用filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)
你可以将很多标志传递给filter_var($ _ POST ['content'],FILTER_SANITIZE_STRING)有很多过滤器所以看看文档,特别注意电子邮件,因为有人可以注入CC BCC。 htmlentities,htmlcharacters,我的意思是有很多方法可以完成这个,我可能会使用正则表达式或filter_var。