用于检查POST安全性和存储变量的PHP函数

时间:2013-03-04 07:50:05

标签: php html function post http-post

我正在寻找有关如何使功能更容易的信息。我知道有一种更简单的方法,然后将我想要的发布变量写入PHP。

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  $name =   isset($_POST['name']) ? htmlentities($_POST['name']) : '';
  $email =  isset($_POST['email']) ? htmlentities($_POST['email']) : '';
  $interest = isset($_POST['interest']) ? htmlentities($_POST['interest']) : '';
  $checkbox = isset($_POST['checkbox']) ? htmlentities($_POST['checkbox']) : '';

到目前为止,我想出了一个像这样的函数:

function req_post($n){
  '$'$n = isset($_POST["$n"]) ? htmlentities($_POST["$n"]) : '';
}

我知道我做错了,有点像PHP新手。任何帮助将不胜感激。提前谢谢。

3 个答案:

答案 0 :(得分:2)

制作这样的函数似乎很有吸引力,似乎删除了重复的代码等,但它总是最终咬你。

您的代码显示您为下一个将成为html页面的环境转义所有POST数据。

所以,如果你只输出$ email到html页面,它看似值得。

但是如果你输出到一个网页“谢谢你的电子邮件”并将其存储到数据库中,那么你还没有为数据库转义它,所以你冒着sql注入攻击的风险。

直到你知道得更清楚,你最好离开$ _POST ['email'],并在输出时将其转义。

echo htmlentities($_POST['email']);

OR

$query = 'update names set email = "'.mysql_real_escape_string($_POST['email']).'" where ID =1';

或者首选使用PDO / Mysqli和准备好的语句,这些语句可以帮助您逃避。

htmlentities 是一种逃避html输出的方法 mysql_real_escape_string 是一种逃避mysql数据库的方法(虽然已经过时了,正如我和其他人所说的那样)。

事实是,如果你遇到类似$ email的var,你会想到,现在坚持下去,这是否为下一个环境做好了准备?它来自哪里?

当你看到$ _POST ['email']时,你知道你正在处理可能非常脏和危险的数据,并且你小心处理它。

你会花更多的时间做一些过滤,并且可能决定如果$ _POST ['email'](或名称或其他)确实是空的,下一步做什么 - 重新定位用户,显示警告给用户等等。

助记符FIEO提供了基本规则,滤波器输入,逃生输出,你可以花几个小时来研究它,为你节省很多未来的痛苦。

答案 1 :(得分:0)

//If you intend to put into database and you need to use a function

function clean($value){
$array = array("name", "email", "interest", "checkbox"); //For added security
   if(isset($_POST[$value]) && in_array($value, $array)){ //Since you are only concerned with post;
    return mysqli_real_escape_string($db_connection, $_POST[$value]); //and YES, use mysqli - forget what is deprecated in future projects
 }
}

$clean_name = clean("name");
$clean_email = clean("email");
$clean_interest = clean("interest");
$clean_checkbox = clean("checkbox");

echo $clean_email;

答案 2 :(得分:-2)

function htmlentities_and_checkISset($string){

    $result = isset($string) ? htmlentities($string) : '';

    return $result
}

或者这样做

function htmlentities_and_checkISset(){


        // get number of arguments in this function
         $numargs = func_num_args();

         // get arguments comming to the function
         $arg_list = func_get_args();

         // for each arg do the thing you want and then store it in an array
         for ($i = 0; $i < $numargs; $i++) {

         $data[] = isset($arg_list[$i]) ? htmlentities($arg_list[$i]) : '';

        }

     return $data;
    }

你可以这样称呼它。

$data = htmlentities_and_checkISset($name,$email,$interest,$checkbox);

 $data = htmlentities_and_checkISset($_POST['name'],$_POST['email'],$_POST['interest'],$_POST['checkbox']);