我有一个网站,用户可以在其中向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查询......