3

POSTパラメータの値に次の4文字だけをエンコードするアプローチに出くわしました# ; & +。もしあれば、それはどのような問題を引き起こす可能性がありますか?

個人的に私はそのようなハックが嫌いです。私がこれについて尋ねている理由は、私がその発明者と議論をしているからです。

アップデート。明確にするために、この質問はPOST本体でのパラメーターのエンコードに関するものであり、サーバー側でのPOSTパラメーターのエスケープに関するものではありません。たとえば、シェル、データベース、HTMLページなどにパラメーターをフィードする前です。

4

3 に答える 3

1

rfc1738から(application/x-www-form-urlencodedエンコーディングを使用してデータを転送している場合):

安全ではない:

キャラクターはいくつかの理由で安全ではない可能性があります。URLが文字起こしまたは植字されたり、ワードプロセッシングプログラムの処理を受けたりすると、重要なスペースが消えたり、重要でないスペースが導入されたりする可能性があるため、スペース文字は安全ではありません。文字「<」および「>」は、フリーテキストのURLの区切り文字として使用されるため、安全ではありません。一部のシステムでは、引用符( "" ")を使用してURLを区切ります。文字"# "は安全ではなく、ワールドワイドウェブやその他のシステムでフラグメント/アンカーからURLを区切るために使用されるため、常にエンコードする必要があります。それに続く可能性のある識別子。文字「%」は、他の文字のエンコードに使用されるため、安全ではありません。ゲートウェイや他のトランスポートエージェントがそのような文字を変更することがあることが知られているため、他の文字は安全ではありません。これらの文字は、「{」、「}」、「|」、「\」、「^」、「〜」、「[」、「]」、および「`」です。

安全でない文字はすべて、常にURL内にエンコードする必要があります。たとえば、通常はフラグメント識別子やアンカー識別子を処理しないシステムでも、文字「#」をURL内にエンコードする必要があるため、URLをそれらを使用する別のシステムにコピーする場合は、URLを変更する必要はありません。 URLエンコーディング。

于 2010-02-26T22:47:14.977 に答える
0

これを考慮してください:$sql ='DELETE * fromarticles WHEREid='.$_POST['id'].';
そしてあなたはフォームに入力します:1' OR '10
それからこれになります:$sql ='DELETE * fromarticles WHEREid='1' OR '10';

于 2010-02-26T21:21:45.053 に答える
0

メタ文字のエスケープは、通常(常に?)インジェクション攻撃を防ぐために行われます。システムが異なればメタ文字も異なるため、それぞれに注射を防ぐ独自の方法が必要です。システムが異なれば、文字をエスケープする方法も異なります。一部のシステムでは、制御とデータのチャネルが異なるため、文字をエスケープする必要はありません(プリペアドステートメントなど)。さらに、フィルタリングは通常、データがシステムに導入されたときに最適に実行されます。

最大の問題は、これらの4文字だけをエスケープしても完全な保護が提供されないことです。言及した4文字をフィルタリングした後でも、SQL、HTML、およびシェルインジェクション攻撃が発生する可能性があります。

于 2010-02-26T21:14:51.010 に答える