【问题标题】:How to accept only certain special characters while accepting a location address in PHP?如何在接受 PHP 中的位置地址时只接受某些特殊字符?
【发布时间】:2016-05-28 22:01:51
【问题描述】:

我想接受一个地点的地址并将其输入我的数据库。如果我将地址作为参数发送给以下函数,它将删除所有初始和结束空格以及所有特殊字符

 public function sanitizeString($string){
        $sanitized_string = htmlentities(mysqli_real_escape_string($this->conn, trim($string)));
        return $sanitized_string;
    }

但正如我们在

之类的地址中所知道的那样

1/A Grand Trunk Road, Kolkata - 31

需要考虑一些特殊字符,例如 '/'、'-'、'、'

我基本上想将某些地方的地址存储在我的数据库中,并使用 Google Maps GeoCoding API 将它们转换为纬度和经度,并使用标记在 Google Map 上标记它们。

任何人都可以建议我如何清理地址以保持某些特殊字符完整或其他存储地点地址的方法吗?

编辑

对于那些询问的人,我在处理数据库查询时确实使用 PDO 准备语句。这是一个例子

public function getUserByEmailAndPassword($email, $password){
        $stmt= $this->conn->prepare("select * from users where email= ? and status=1");
        $stmt->bind_param("s", $email);

        if($stmt->execute()){
            $user= $stmt->get_result()->fetch_assoc();
            $stmt->close();
            return $user;
        }
        else{
            return NULL;
        }
    }

但在我将 $email 作为参数传递之前,我正在使用 mysqli_real_escape_string 对其进行清理,我可能不需要这样做,因为我认为 prepare 和 bind_param 负责 sql 注入。

【问题讨论】:

  • '/'、'-'、',' 在此上下文中不是特殊字符。 qquesque - github.com/…
  • 如果我的回答有帮助,请告诉我。
  • 但所有 ASCII 标点符号和符号都是特殊字符,它们可能不在这种情况下,但如果我清理字符串,它将删除所有特殊字符
  • 在将数据插入数据库之前不要做 htmlentities;在显示数据时使用它,而不是在存储数据时使用它
  • @CodeRabbit,不,不是所有的 ASCII 标点和符号都是特殊字符,为什么要特殊? stackoverflow.com/questions/1086918/…

标签: php google-maps


【解决方案1】:

作为一般规则,在使用 PDO 时,您不要尝试将 WHEN INSERTING 值清理到数据库中。我们准备了语句和参数绑定选项来防止sql注入

现在,当您实际使用存储在数据库中的信息(可能包含恶意代码)时,您总是在回显任何内容时使用函数htmlspecialchars()。例如:

//if you obtained the info from your database as follows:
$row = $stmt->fetch();

//then you can output it as follows:
echo htmlspecialchars($row['address']);

并且您的代码将受到 sql 注入(如果您在最初将信息插入数据库时​​使用准备好的语句和绑定参数)和带有函数 htmlspecialchars() 的 XSS 的保护

【讨论】:

  • 好的,所以插入数据库的内容并不重要,只有当我获取它时我才应该做 htmlentities ?
  • 这并不是“无关紧要”,真正的问题是您什么时候清理您的信息。以前,在准备好的语句存在之前,用户必须清理输入,因为这是防止 sql 注入的唯一方法,但问题是您没有用户(非恶意)实际放置的“原始”数据.所以基本上是的,只要你在“使用时”对输入进行清理,只要你使用技术来保护自己免受 sql 注入,你最好将原始数据插入数据库。
  • @Webeng PDO?请重新阅读作者的帖子。他有提到 PDO 吗?
  • @strangeqargo 我已经阅读了他的帖子。他没有提到他使用哪种方法来查询数据库。由于 PDO 是迄今为止最受推荐的方法,因为它的安全性,stackoverflow 上的许多顶级用户都在加强使用这种方法方面付出了额外的努力,我也采用了这种策略。如果他不使用 PDO,我建议他使用它。
  • 他提到了mysqli。如果您建议他切换到 PDO,请清楚明了地执行此操作。最好举个例子,所以他不知道“好吧,所以插入数据库的内容并不重要”
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
相关资源
最近更新 更多