如果插入用户输入而不修改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)
可以采取哪些措施来防止这种情况发生?
今天我正在玩PHP,我发现字符串值"true"和"false"在条件中没有被正确解析为boolean,例如考虑以下函数:
function isBoolean($value) {
if ($value) {
return true;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我执行:
isBoolean("true") // Returns true
isBoolean("") // Returns false
isBoolean("false") // Returns true, instead of false
isBoolean("asd") // Returns true, instead of false
Run Code Online (Sandbox Code Playgroud)
它似乎只与"1"和"0"值一起使用:
isBoolean("1") // Returns true
isBoolean("0") // Returns false
Run Code Online (Sandbox Code Playgroud)
PHP中是否有一个本机函数将"true"和"false"字符串解析为boolean?