如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:
$unsafe_variable = $_POST['user_input'];
mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)
这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)
可以采取哪些措施来防止这种情况发生?
我正在尝试编写一个 MySQL 脚本来将数据导入到我的 Linux 服务器的表中。这是名为 的脚本update.sql:
SET @query = CONCAT("LOAD DATA LOCAL INFILE '", @spaceName, "' INTO TABLE tmp FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';");
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Run Code Online (Sandbox Code Playgroud)
而且,我编写了一个名为 bash 脚本main.sh:
mysql -h "localhost" -u "root" "-pmypassword" "mydb" -e "set @spaceName=\"$1\";source update.sql;"
Run Code Online (Sandbox Code Playgroud)
然后我执行./main.sh France.list. 这France.list是我试图导入到我的数据库中的数据文件。
但是我收到一个错误:
文件中第 2 行的 ERROR 1295 (HY000):“update.sql”:准备好的语句协议尚不支持此命令
我发现了这个问题:
MySQL - Load Data Infile with variable path
那么,这是否意味着无法将参数传递给LOAD DATA …