如果插入用户输入而不修改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)
可以采取哪些措施来防止这种情况发生?
只看:
(来源:https://xkcd.com/327/)
这个SQL做了什么:
Robert'); DROP TABLE STUDENTS; --
Run Code Online (Sandbox Code Playgroud)
我知道这两个'
并且--
是用于评论,但是这个词也没有DROP
被评论,因为它是同一行的一部分?
我有这个数组
Array
(
[data] => Array
(
[0] => Array
(
[page_id] => 204725966262837
[type] => WEBSITE
)
[1] => Array
(
[page_id] => 163703342377960
[type] => COMMUNITY
)
)
)
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在没有这种结构的情况下回复内容?我试过了
foreach ($results as $result) {
echo $result->type;
echo "<br>";
}
Run Code Online (Sandbox Code Playgroud) 我无法访问我的 json,想知道错误在哪里。
$json = json_encode($data);
// string(1065) "[{"id":"test123","key":["one",...
Run Code Online (Sandbox Code Playgroud)
然后我对其进行解码以使其可以通过以下命令访问:
$json = json_decode($json, true);
// Output:
array(3) {
[0]=>
array(4) {
["id"]=>
string(14) "test123"
Run Code Online (Sandbox Code Playgroud)
当我想回应它时,它给了我:
echo $json[0];
Run Code Online (Sandbox Code Playgroud)
数组到字符串的转换