0

我已经构建了以下表单,该表单从人们那里收集电子邮件地址和网站 url。在数据库中,电子邮件和网站 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 } ?>
4

2 回答 2

0

您可以使用这些验证过滤器来验证这些值。您可以在此处找到一些相关说明。

为防止跨站点脚本和类似的攻击媒介,除非已验证,否则不应将电子邮件或 URL 插入数据库。

于 2012-08-19T15:52:31.657 回答
0

我认为只要您使用真正的转义和验证 url nd 电子邮件等重要功能,它就应该很好用。保持

谢谢

于 2012-08-19T16:04:51.653 回答