我的php脚本正在通过$ _post接收数组。数组具有(或有望具有)以下格式:
array (
0 =>
array (
'Datum' =>
array (
0 => '2016-11-29',
1 => '2016-11-29',
2 => '2016-11-29',
),
'VK' =>
array (
0 => '18 Worker',
1 => '1 Other Worker',
2 => '11 One more worker',
),
'Dienstbeginn' =>
array (
0 => '08:00',
1 => '08:00',
2 => '08:30',
),
'Dienstende' =>
array (
0 => '14:00',
1 => '16:30',
2 => '16:00',
),
'Mittagsbeginn' =>
array (
0 => '',
1 => '11:30',
2 => '12:00',
),
'Mittagsende' =>
array (
0 => '',
1 => '12:00',
2 => '12:30',
),
'Kommentar' =>
array (
0 => '',
1 => '',
2 => '',
),
),
)
我有一个将用户数据写入我自己的变量的函数,并将空白输入转换为null值以供数据库存储。
foreach ($_POST['Dienstplan'] as $plan => $inhalt_tag) {
foreach ($inhalt_tag as $column => $lines) {
foreach ($lines as $linenumber => $line) {
if ($line === '') {
//Empty fields should be inserted as null values inside the database.
//TODO: Should we make an exeption for Comments?
$line = 'null';
}
//TODO: Is it a security issue, that we use $column and $linenumber directly? Do we have to sanitize those?
$Dienstplan[$plan][$column][$linenumber] = sanitize_user_input($line);
}
}
}
function sanitize_user_input($data) {
$clean_data = htmlspecialchars(stripslashes(trim($data)));
return $clean_data;
}
这种方法有多安全?我可以在这种情况下保存$ plan,$ column和$ linenumber吗?攻击者可以用来破坏事物的第一点在哪里?
这种方法有多安全?我可以在这种情况下保存$ plan,$ column和$ linenumber吗?
否。您正在使用错误的工具在多个层。
- 如果您要预防SQL注入,请使用准备好的陈述而不是逃避输入。
- 如果您想防止跨站点脚本,逃脱输出,切勿输入。
如果要验证结构化输入(即用于类型安全,也要执行输入白人),请查看Ionizer。