我使用以下代码大致识别机器:
$computerId = "UserAgent:".$_SERVER['HTTP_USER_AGENT']."RemoteAddress:".$_SERVER['REMOTE_ADDR'];
我使用以下代码比较转义字符串和未转义字符串:
echo "Unescaped:
".$computerId."
Escaped:
".mysqli_real_escape_string($conn, $computerId);
这是我得到的输出:
未转义: UserAgent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,like Gecko)Chrome / 68.0.3440.106 Safari / 537.36RemoteAddress ::: 1
转义: UserAgent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,like Gecko)Chrome / 68.0.3440.106 Safari / 537.36RemoteAddress ::: 1
如您所见,它们是完全相同的,并且看起来转义没有做任何事情,因为两个字符串都包含未转义的反斜杠和分号。可能是什么原因造成的?
答案 0 :(得分:2)
根据文档
http://php.net/manual/en/function.mysql-real-escape-string.php
mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,该函数将反斜杠添加到以下字符前:\ x00,\ n,\ r,\,','和\ x1a。
因此分号(;)不是该函数转义(或添加)的字符。