0

Web サイトの挿入/削除要求を処理する専門的な方法は何でしょうか?

現在、私が持っているのは<input type = "hidden"/>、各フォームに 2 つ挿入したことです。1 つの非表示の値は必要な関数に対応し、もう 1 つはこの関数のパラメーターです。したがって、フォームが送信されると、PHP を介して非表示の値を呼び出すだけのすべての挿入/削除要求を処理する post.php ファイルがありますcall_user_func()。そのようです:

<input name = "arg" value = "{$id}" type = "hidden"/>
<input name = "call" value = "delete_member" type = "hidden"/>

call_user_func($_POST['call'], $_POST['arg']);

クライアント側のソースに隠蔽が実際には隠されていなかったことがわかったので、このソリューションがどれほど賢明であるかについて疑問を抱いています。

私の最初の解決策は、基本的に、どの関数を呼び出すかをチェックする多くの条件を設定することでしたが、私はそれが本当に嫌いだったので、この解決策で変更しました。

私はこれを行うことができるより良い方法は何だろうか、それとも専門家はどのように行うのだろうか? 挿入/削除クエリの処理。

4

2 に答える 2

1

これは、クライアント側からアクションを呼び出すための非常に悪い方法だと思います。

1つは、このデータがHTMLに格納され、クライアントが常に表示および編集できるようにすることです。そのため、これは、クライアントから受信したデータを信頼できないことを意味し、クライアントが呼び出している関数を信頼できないことを意味します。

私の以前の考えを補強するもう一つのポイント。検証を実行して、それが関数であることを確認すると言いますが、問題があります。クロージャはこれらの関数でtrueを返します(これらは関数とメソッドであり、存在するため)。したがって、ユーザーは非表示フィールドの値としてanon関数を配置し、サーバー上で実際に必要なものを実行できます。

他の人が言うように、MVCを調べることをお勧めします。Yii / CodeIgniter / Zend / Lithium / Kohana / etcがこれをどのように行うか、そしてそれらがどのようにルーティングするかを調べてください。

削除などのアクションのルーティングが私のお気に入りのフレームワークであるYiiによってどのように行われるかの例:

class UserController extends CController{
    public function actionDelete($id = null){
       if($id===null){ return false; }
    }
}

/user/delete?id=2次に、 index.phpをにルーティングするform / link呼び出しは、ユーザーコントローラー内の関数userControllerを使用して、そのコードを実行します。actionDeleteもちろん、これは非常に単純化されたバージョンであり、脆弱性を阻止するためにはるかに複雑になります。

CSRF検証を調べることもできます。

于 2012-08-26T02:41:31.183 に答える
1

最も一般的な方法は、ブログメッセージを送信するために、この例のように一度に1つのフォームを処理する関数を呼び出すことです。

blog.php

if(isset($_POST['submit'])) {
  save_message();
} else {
  display_form();
}

function display_form()
{
  ?>
  <form action="blog.php"> etc etc....
  <?php
}

function save_message()
{
  //security checks and inserts etc
  $_SESSION['message'] = 'Form saved succesfully';
  header('location: blog_overview.php');
}

これは私によると実践的ですが、上記のコードは機能している(そして私にとっては時代遅れである)ため、CodeigniterやKohanaなどのフレームワークをチェックアウトすることをお勧めします。OOP(オブジェクト指向プログラミング)とMVC(モデルビューコントローラー)に関するチュートリアルをいくつか読んでください。大変な作業に思えるかもしれませんが、本当にそれを正しく実行したいのであれば、時間と労力を費やす価値があります。

于 2012-08-26T02:41:53.100 に答える