0

これを簡単にする関数を作成する方法に関する情報を探しています。投稿された変数を 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は初めてです。どんな助けでも大歓迎です。前もって感謝します。

4

3 に答える 3

2

このような関数を作成したり、一見重複したコードを削除したりするのは魅力的に思えるかもしれませんが、最終的には常にあなたを悩ませてしまいます.

あなたのコードは、HTML ページになる次の環境に備えて、すべての POST データをエスケープしていることを示しています。

したがって、$email を html ページのみに出力する場合は、一見の価値があります。

しかし、「Thank you $email」という Web ページに出力し、これを db に保存する場合は、db 用にエスケープしていないため、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 出力をエスケープ する方法です。

実際のところ、$email のような var に出くわした場合、次の環境でエスケープする準備ができているかどうかを考えなければなりません。それはどこから来たのか?

$_POST['email'] が表示された場合、非常に汚れた危険なデータを扱っている可能性があり、慎重に扱っていることがわかります。

フィルタリングに時間を費やし、おそらく $_POST['email'] (または名前など) が実際に空の場合、次に何をすべきかを決定する方がはるかに良いでしょう。ユーザーを再配置し、ユーザーに警告を表示します。等々。

ニーモニック FIEO は基本的なルール、フィルター入力、エスケープ出力を提供し、それを調査するのに数時間を費やすことで、将来の多くの苦労を省くことができます。

于 2013-03-04T08:28:30.073 に答える
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;
于 2013-03-04T09:11:00.567 に答える
-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']);
于 2013-03-04T07:59:25.103 に答える