Spambots绕过strip_tags和其他措施。我究竟做错了什么?

时间:2014-09-26 08:01:05

标签: php mysqli

我有一个网站,用户可以在其中向Google地图添加位置。 Spambots一直绕过我的代码所以显然我做错了。这就是我所拥有的(笨重,可能有点矫枉过正,但仍然无效):

    // adding a new location to the db
if (isset($_POST['name']))
{
    $name = $mysqli->real_escape_string($_POST['name']);
    $description = $mysqli->real_escape_string($_POST['description']);
    $description = strip_tags(html_entity_decode($description));
    $username = $mysqli->real_escape_string($_POST['username']);
    $lat = $mysqli->real_escape_string($_POST['lat']);
    $long = $mysqli->real_escape_string($_POST['long']);
    $address = $mysqli->real_escape_string($_POST['address']);
    $phone = $mysqli->real_escape_string($_POST['phone']);
    $email = $mysqli->real_escape_string($_POST['email']);
    $site = $mysqli->real_escape_string($_POST['site']);
    $tradition = $mysqli->real_escape_string($_POST['tradition']);

    // generate id
    $id = 1;

    $res_query = "select max(id) from locations";
    $result = $mysqli->query($res_query) or die($mysqli->error.__LINE__);
    if ($result->num_rows != 0)
    {

        $row = $result->fetch_array(MYSQLI_ASSOC);
        $id = $row['max(id)']+1;
    }
    // sql query to add location
    if ($lat != 0 && $long != 0)
    {

        $stmt = $mysqli->prepare("insert into locations(id, name, latitude, longitude, address, description, phone, email, site, tradition, username) values (?,?,?,?,?,?,?,?,?,?,?)");
        $stmt->bind_param('isddsssssss', $id, $name, $lat, $long, $address, $description, $phone, $email, $site, $tradition, $username);
        $stmt->execute();
        $stmt->close();

    }

所以我的问题是即使我使用strip_tags,垃圾邮件程序也会在描述字段中发布http链接,而且,它们总是将lat和long保留为0,即使我已经尝试阻止它通过if ($lat != 0 && $long != 0)。到目前为止,spambots总是将坐标设置为0,所以如果我能设法拒绝这些值,那将是一个好的开始。我做错了什么?

编辑:我添加了一个代码片段,用于在插入数据库之前将变量附加到文本文件中,当通过站点执行时,变量会附加到文件中,但不会在spambots发布时附加。我猜他们完全绕过了这个函数,但我没有在代码中包含用户输入的任何其他SQL查询......

0 个答案:

没有答案