是否应该验证 IP 地址以防止 SQL 注入?

信息安全 php sql注入 mysql 验证
2021-08-31 15:20:10

在 PHP 中,我检索用户的 IP 地址 ( $_SERVER['REMOTE_ADDR']) 以在某些 MySQL 查询中使用它,但我验证它们是真实的 IP 地址。

我应该在 MySQL 查询中使用它们之前验证用户 IP 地址,还是在我使用它们时它们总是有效的 IP 地址$_SERVER['REMOTE_ADDR']我试图阻止 SQL 注入。

如果我应该验证,您推荐使用哪个 PHP 函数?mysqli_real_escape_string()我应该通过等发送IP地址吗?

3个回答

您应该使用准备好的语句来防止 SQL 注入。看看这个问题

但是,$_SERVER['REMOTE_ADDR']它应该是一个有效的 IP 地址,因为它来自服务器,由 TCP 握手验证。有关此问题的扩展讨论,请参阅此问题。

这个页面看起来 $_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() 函数的手册。