我刚刚启动PHP并且有一个用户可以提交数据的表单。在显示或发送数据之前,它会被清理并验证(trim,stripslashes和htmlspecialchars)并保存为新变量,然后使用这些变量代替直接提交的值。
我的问题是,对未经过抽样化的价值做任何事都可以安全吗?只有在显示值时,安全隐患才会变得明显吗?
具体来说,执行
等代码会有任何问题 if(empty($_POST["theirname"]){code;}
如果他们在提交时尝试某种攻击或将代码放入该框中?
目前我在检查它们是否为空之前清理所有输入,但是我想在这种情况下避免错误/警告,例如,如果用户提交一个空白框(因为可以在POST值上调用清理功能) ; t存在)
答案 0 :(得分:2)
PHP的filter_*
函数。它们是对每个变量进行消毒的函数,无论是服务器变量(如$ _SERVER,$ _GET,$ _POST,$ _REQUEST)还是您自己的变量。
由于您要清理$_POST
,以下是您应该使用的内容:
$theirname = filter_input(INPUT_POST, "theirname");
if (!$theirname) {
echo "theirname is invalid!";
} else {
// your code
}
filter_input
可以检查变量是否存在,是否为空,以及是否有任何可以使您的代码/网站易受攻击的内容(HTML标记注入,JS代码注入,通过评估注入PHP代码等) 。这比自己检查更好。
当然,如果您决定不信任filter_*
函数,您可以随时自行检查,在这种情况下,您需要:
is_null
检查变量是否存在和/或检查NULL
; eval
执行该变量; 正如您所看到的,它是一个广泛的列表,如果您不想依赖PHP的内置函数,那就是您需要做的事情。
来源:
答案 1 :(得分:0)
首先检查未定义的变量。
if(!is_null($_POST["theirname"])){
if(empty($_POST["theirname"]){code;}
}
绝对需要检查是否存在任何变量。
$bingo = isset($variable);
答案 2 :(得分:0)
您的示例中的错误是您if
判断中缺少)。
//Your code
if ( empty($_POST["theirname"]) { code; }
^^
//Code updated
if (empty($_POST["theirname"])) { code; }
在检查您的输入是否为empty
之前,您可以检查您的表单是否已定义且不是NULL
。
示例:强>
//Reset.
$msg = $theirname = NULL;
//Check if the form is defined.
if (isset($_POST)) {
//Check input empty.
if(empty($_POST['theirname'])) {
$msg = 'Inputs are required';
} else {
$theirname = data_filter($_POST['theirname']);
}
//check $theirname.
if ($theirname) {
//Do something with $theirname...
}
}
//Filter function.
function data_filter($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
//Message.
echo $msg;
答案 3 :(得分:0)
通常,您要首先检查是否定义了变量。您可以if(!is_null($_POST["theirname"]))
执行此操作
如果已定义,那么您可能想检查它是否为空,如果没有,则执行一些操作。 (例如消毒和/或验证)
if(!is_null($_POST["theirname"])){
if(!empty($_POST["theirname"])
{
//Do some stuff here
}
else
{
//send notification that the user didn't input any data
}
}
答案 4 :(得分:0)