我使用以下代码大致识别机器: $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,如gecko)chrome/68.0.3440.106 safari/537.36远程地址:::1
逃脱:useragent:mozilla/5.0 (windows nt 10.0;win64;x64)applewebkit/537.36(khtml,如gecko)chrome/68.0.3440.106 safari/537.36远程地址:::1
如您所见,它们是完全相同的,而且转义看起来并没有做任何事情,因为两个字符串都包含未转义的向后斜杠和分号。是什么原因造成的?
1条答案
按热度按时间mctunoxg1#
根据文件
http://php.net/manual/en/function.mysql-real-escape-string.php
mysql\u real\u escape\u string()调用mysql的库函数mysql\u real\u escape\u string,它将反斜杠前置到以下字符:\x00、\n、\r、\、'、'和\x1a。
因此分号(;)不是由函数转义(或加前缀)的字符。