如何使用PHP阻止URL中的特殊字符?

时间:2018-09-12 21:27:56

标签: php url sql-injection

是否存在代码来阻止url中的特殊字符?如果您尝试在网站的网址中添加特殊字符(例如:/;),则会将其转换为“%”。

这可以防止SLQ注入或某种注入,对吧?

我该怎么办?

此刻,我的网站只转换了撇号(')。

3 个答案:

答案 0 :(得分:3)

这称为URL encoding,并不用于防止SQL注入或任何其他类型的攻击。您可以通过URL functions,特别是urlencode在PHP中完成此操作。

但是,如果您不了解其中的含义或含义,我建议不要“盲目”这样做。

如果您有实际要解决的问题,则应ask about that problem and not your perceived solution

答案 1 :(得分:3)

使用特殊代码替换对于URL无效的字符是urlencode函数。这与安全性无关。但是如果没有它,URL可能会无效,因此您将不会得到响应。

为避免SQL注入漏洞,请使用准备好的语句(取决于用于连接到数据库的库/扩展名,它可能是mysqli::preparepdo::prepare)或其他。检查文档文章中的示例。

答案 2 :(得分:2)

您所说的称为 URL encoding ,与SQL注入无关。 URL编码是为了避免与以下具有特殊含义的字符混淆:

!    *       '       (       )       ;       :       @       &       =       +       $        ,      /        ?       #      [       ]
%21  %23     %24     %26     %27     %28     %29     %2A     %2B     %2C     %2F     %3A     %3B     %3D     %3F     %40    %5B     %5D

这是由浏览器自动完成的,您不需要为用户在服务器端进行任何设置。但是,如果需要传递编码的字符串,可以使用 urlencode() ,如果需要查找使用的字符串,可以使用 urldecode() 成为。

为防止SQL注入,最重要的事情是使用准备好的语句。在程序化MySQLi中,这看起来像:

$stmt = $conn->prepare('SELECT * FROM table WHERE field = ?');
$stmt->bind_param('s', $variable);
$stmt->execute();

有关其他预防措施,建议您参考 this post