0

可能重复:
防止 SQL 注入的最佳方法?

我正在制作一个文件系统,用户只能在其中指示文件的位置和不应该上传的位置,只是为了使用 javascript 和输入文件类型捕获文件名。

问题是当我执行查询以插入...文件的路径是这样的:

C:\用户\文件\test.php

这里的问题是 \ 字符,因为它省略了 PHP 中的下一个字符。所以它在数据库中保存为:C:usersfilestest.php。

我有另一个输入框,用户可以在其中指定他们想要文件的位置......所以他们写的时候:

C:\ 查询不执行,因为 \ 字符。

有什么想法吗?

4

2 回答 2

1

你可以使用\\尽管单\

于 2012-11-09T16:03:47.767 回答
1

如果您正确地转义您尝试插入的字符串,您将不会遇到\消失的问题。实际上是 MySQL 将单个反斜杠视为转义字符串。

所以是这样的:

$path_string_escaped = mysqli_real_escape_string($db_connection, $path_string);

$path_string_escaped在您的插入中使用。

请注意,这与 make$path_string_escaped看起来像C:\\users\\files\\test.php. MySQL 然后将取消转义反斜杠,以便C:\users\files\test.php将其写入数据库。从数据库中读取来修改字符串时,您不需要做任何事情。

您应该始终转义您将写入数据库的用户提供或用户可访问的数据。

这也是一个很好的例子,说明为什么即使使用准备好的语句,当您处理可能包含 MySQL 转义序列的字符串时,您仍然应该转义正在写入 DB 的用户可访问数据。虽然使用准备好的语句当然可以防止实际的注入攻击,但当字符串中已经存在 MySQL 转义序列时,它不会帮助您以您想要的方式将数据实际写入数据库。

于 2012-11-09T16:18:14.890 回答