我正在学习一个用PHP编写的Web应用程序的教程,将输入中的空格列为黑名单('id'参数)。任务是添加其他字符,这些字符基本上绕过了这个黑名单,但仍然被后端的MySQL数据库解释。有效的是这样构建的URL -
<?php
if(isset($_SESSION['div_loading'])
echo $_SESSION['div_loading'];
else
echo 1;
现在,我的问题很简单,如果'%A0'表示NBSP,那么为什么当我访问http://www.url-encode-decode.com这样的网站并尝试解码网址http://192.168.2.15/sqli-labs/Less-26/?id=1'%A0||%A0'1
时呢?被解码为http://192.168.2.15/sqli-labs/Less-26/?id=1'%A0||%A0'1
。
而不是黑盒子里面的问号,我期待看到一个空白区域。
答案 0 :(得分:1)
我怀疑这是由于字符编码之间的差异造成的。
值A0
代表ISO-8859-1编码中的nbsp
(也可能代表其他扩展ASCII编码)。 http://www.url-encode-decode.com处的页面似乎使用UTF-8编码。
您的问题是UTF-8中没有A0
代表的字符。 UTF-8中的等效nbsp
字符将由值C2A0
表示。
解码http://192.168.2.15/sqli-labs/Less-26/?id=1'%C2%A0||%C2%A0'1
将生成您期望的nbsp
个字符。
答案 1 :(得分:0)
独立于编码错误的原因,请尝试%20 替换空白! 稍后您可以使用
str_replace空格echo str_replace(" ", " ", $_GET["id"]);
答案 2 :(得分:0)
这个网站上的脚本可能无法正常运行。如果您在PHP代码中使用它,它应该可以正常工作。
echo urldecode( '%A0' );
输出: