0

さて、私は問題があり、提案が必要です。

現在、商品データを含むcsvファイルをアップロードしています。多くの製品が存在する可能性があります。ライブラリを使用してcsvファイルを読み取り、配列内のすべてのデータを取得しています。今、私はこれを解決する方法で立ち往生している状況があります。

Scanrio:

csvをアップロードした後、ユーザーは9つの特定の列があるフォームを持っています。csvのすべての列は、ドロップダウンとして表示される配列に入る必要があります。左側にはフォームに特定のフィールドが含まれ、右側には各フィールドの前にcsv列名を含むドロップダウンがあります。マップを選択した後、ボタンをクリックし、配列から列を選択してテーブルに保存します。ユーザーがマッピングする列を選択している間、テーブルに保存せずにデータを保持する方法がわかりません。私は何をしますか?配列全体を非表示のフィールドに配置しますか?提案してください。

4

2 に答える 2

1

ユーザーがマッピング用の列を選択している間、テーブルに保存せずにデータを保持する方法がわかりません。私は何をしますか?配列全体を非表示フィールドに入れますか? 提案してください。

それらをセッション変数に保存すると、そこに保存したものはすべてユーザーごとに個別に保持され、そのユーザーがログアウトするか、コードの一部が明示的に削除されるまで保持されます。(たとえば、データベース上のデータを破棄または永続化した後)。

うまくいけば、あなたはすでにセッションを使用しています。php.net でセッション変数を見てください。

注: 私は codeigniter を使用したことがありませんが、簡単な検索でセッションを管理するためのクラスが含まれていることがわかります。FlashData の下を見てください。


編集:

Codeigniter セッション変数には 4KB の制限があり、それで十分かもしれませんし、そうでないかもしれません。そうでない場合は、常に次のいずれかの代替手段を使用します。

  1. データベースを使用してデータを保存し、セッション変数にアイテム ID とユーザー ID を保存して、データを取得できるようにします。

  2. ファイルを使用すると、ランダムな名前を生成してセッション変数に保存し、必要な内容をファイルに保存できます。

セッションの終了を処理できない場合は、有効期限をデータベースに保存し、プログラムされたタスク (cron を使用できますか?) を使用して、期限切れのアイテムを一時テーブル (またはファイル) から削除することができます。

ただし、注意してください!codeigniter のセキュリティについてはわかりませんが、いくつかのリスクがあります。データベーステーブル内のユーザーに関連付けられたランダムな一意の値と、セッションの存続期間に一致する有効期限を持つ非表示の「トークン」フィールドを追加することができます。フォームを送信するたびに新しいトークンを作成し、それを受信したら、送信されたフォームのトークンがデータベース内のユーザー (セッションによって識別される) の有効なトークンと一致するかどうかを確認し、一致する場合はトークンを削除して、フォームの残りの処理に進みます。トークンが一致しないか有効でなくなった場合は、セッションが期限切れになったか、誰かが Cookie をいじっていたか、攻撃を生き延びた (誰かが古いトークンで投稿を再作成した場合)。

繰り返しますが、コーディングライターのセキュリティについては知りません。しかし、私がそのフレームワークの作成者であれば、既にトークンが実装されているはずです... したがって、このセキュリティ リスクは既にカバーされている可能性があります。

クロスサイト リクエスト フォージェリの詳細については、OWASP を参照してください。

于 2013-02-25T18:43:56.163 に答える
0

ユーザーデータをセッションに保存しないのはなぜですか? このようにして、HTML に配置せずにページからページに渡すことができます (ユーザーが簡単に変更できる場所)。

最良のオプションは、セッションまたはクッキーです。Cookie には一定量のデータしか含めることができないという点で制限があり、Cookie はクライアント マシンに保存されるため、一定量の Cookie に制限されます。 セッションを使用すると、サーバーに情報が保存されます。Codeigniter はサイズを 4kb に制限します。これを行うには、PHP で追加するだけです。

session_start()

セッション変数を使用するすべてのページの上部に。

ユーザー入力をサニタイズする必要があります。セッション変数を設定するには、代入演算子 (=) を使用します。

$_SESSION['var'] = filter_input( INPUT_POST, 'field_name', FILTER_SANITIZE_FULL_SPECIAL_CHARS );

get を使用している場合は、INPUT_GET を使用できます。

ユーザーがフォームを送信していない場合は、JavaScript を介してイベント リスナーを追加できます。フォームの値が入力されたら、それらを Cookie に保存し、PHP を使用して Cookie からデータを抽出できます。

サーバー上のユーザーデータをサニタイズして検証することが常に最善です。

于 2013-02-25T20:54:28.203 に答える