我已经构建了以下表单,用于收集人们的电子邮件地址和网站网址。在数据库中,电子邮件和网站URL设置为唯一,因此一个人不能两次输入相同的电子邮件和网站。
然而,对于PHP来说,我想要仔细检查表单是否包含任何可能允许某人对表单进行恶意攻击和/或可能被利用的验证问题的严重问题。另外因为我想在回发时隐藏表单但是再次显示错误,我最终复制了不理想的表单,但在这种情况下并不是什么大不了的,因为它只是一个快速的表单。主要因素是确保验证非常强大,并且在表单中的服务器/ SQL攻击方面不存在漏洞。
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// DATABASE CONNECTION HERE
$email = mysql_real_escape_string($_POST['EMAIL']);
$website = mysql_real_escape_string($_POST['WEBSITE']);
if ( $email == '' || $website == '' || !filter_var($website, FILTER_VALIDATE_URL) || !filter_var($email, FILTER_VALIDATE_EMAIL) )
{
echo '<p style="color:red;">You must fill out all fields correctly and duplicate emails/websites are not permitted!</p>';
?>
<form action="./" method="post">
<label for="EMAIL">Email Address</label>
<input type="email" value="" name="EMAIL" id="EMAIL" required>
<label for="WEBSITE">Website URL</label>
<input type="url" value="" name="WEBSITE" id="WEBSITE" required>
<input type="submit" value="Join" name="join">
</form>
<?php
}
else
{
$query = "INSERT INTO list VALUES (NULL, '$email','$website')";
$result = mysql_query($query);
echo '<p>THANKS!</p>';
}
}
else
{
?>
<form action="./" method="post">
<label for="EMAIL">Email Address</label>
<input type="email" value="" name="EMAIL" id="EMAIL" required>
<label for="WEBSITE">Website URL</label>
<input type="url" value="" name="WEBSITE" id="WEBSITE" required>
<input type="submit" value="Subscribe" name="subscribe">
</form>
<?php } ?>
答案 0 :(得分:0)
您可以使用these validation filters验证值。您可以找到一些说明for this here。
为了防止跨站点脚本和类似的攻击媒介,除非经过验证,否则不应将电子邮件或网址插入数据库。
答案 1 :(得分:0)
我认为只要您使用重要功能(例如真正的转义和验证网址和电子邮件),它应该会很有效。 坚持下去
日Thnx