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

问题描述 投票:0回答:4

我正在寻找有关如何创建函数以使其更容易的信息。我知道有一种更简单的方法可以将我想要的发布变量写入 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 来说有点陌生。任何帮助将不胜感激。预先感谢您。

php html function post http-post
4个回答
2
投票

创建这样的函数似乎很诱人,看似删除了重复的代码等,但最终总是会咬你一口。

您的代码显示您转义了所有 POST 数据,为下一个环境(即 html 页面)做好准备。

因此,如果您仅将 $email 输出到 html 页面,那么它似乎是值得的。

但是,如果您同时输出到网页“Thank you $email”并将其存储到数据库中,那么您还没有为数据库转义它,因此您面临 SQL 注入攻击的风险。

在您了解得更清楚之前,最好保持 $_POST['email'] 不变,并在输出时将其转义。

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

$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 提供了基本规则,过滤输入,转义输出,您可以通过花几个小时研究它来为自己节省很多未来的痛苦。


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;

0
投票
` $_POST['email'] = array_key_exists('email', $_POST) && is_string($_POST['email']) ? strip_tags(stripslashes($_POST['email'])) : null;
    
    // Check if they have filled in the email section from form
    if (empty($_POST['email'])) {
        echo 'invalid input';
        exit;
    }
    // if using mysqli then escape data like
    $email = mysqli_escpae_string($_POST['email']);
    // insert info into database or whatever
    mysqli_query("INSERT INTO tablename (email) VALUES ('".$email."')");
    echo 'Email posted: '.htmlspecialchars(htmlentities($_POST['email'])); 
`

-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']);
© www.soinside.com 2019 - 2024. All rights reserved.