在 PHP 中,我检索用户的 IP 地址 ( $_SERVER['REMOTE_ADDR']) 以在某些 MySQL 查询中使用它,但我不验证它们是真实的 IP 地址。
我应该在 MySQL 查询中使用它们之前验证用户 IP 地址,还是在我使用它们时它们总是有效的 IP 地址$_SERVER['REMOTE_ADDR']?我试图阻止 SQL 注入。
如果我应该验证,您推荐使用哪个 PHP 函数?mysqli_real_escape_string()我应该通过等发送IP地址吗?
在 PHP 中,我检索用户的 IP 地址 ( $_SERVER['REMOTE_ADDR']) 以在某些 MySQL 查询中使用它,但我不验证它们是真实的 IP 地址。
我应该在 MySQL 查询中使用它们之前验证用户 IP 地址,还是在我使用它们时它们总是有效的 IP 地址$_SERVER['REMOTE_ADDR']?我试图阻止 SQL 注入。
如果我应该验证,您推荐使用哪个 PHP 函数?mysqli_real_escape_string()我应该通过等发送IP地址吗?
从这个页面看起来 $_SERVER 数组的 REMOTE_ADDR 元素是由服务器填充的,而不是由客户端传递的,所以它应该(没有任何错误)是一个合理的假设,它是远程客户端的 IP 地址(或代表远程客户端的代理服务器)。
正如@Lucb1e 在下面评论的那样, $_SERVER 数组的一些元素来自客户端,应该不那么受信任
正如@Oleksi 提到的,不信任 SQL 查询的输入通常是一个好主意。
REMOTE_ADDR 由接收 TCP 堆栈确定 - 它不是客户端“发送”的数据。IPv4 和 ipv6 都不使用 SQL 中不安全/定界表达式的字符。
然而,存储 IP 地址(即 xxx.xxx.xxx.xxx 或 xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx)没有什么意义,数值更有用,需要更少的存储空间 - 请参阅inet_aton() 和 inet6_aton() 函数的手册。