0

私はPHPを初めて使用しますが、これらのことを考えると、最近は本当に混乱しています。

これが私の質問の詳細です:

まず、クライアントとサーバー間でデータを転送する必要があるという状況です。Ajaxは、クライアント側でデータを表示するために使用する必要があります。サーバー側では、PHPとMySQLを使用してリクエストを解析し、データを取得してから送り返します。

次に問題が発生します。ブラウザから送信されるユーザーデータには&、%、'、 "が含まれている可能性があり、フォーマットされたPOSTリクエストが破損したり、データベース攻撃が発生したりする可能性があります。JSを使用してそれらを検出できますが、ユーザーは検証をバイパスしてデータを送信できます。ユーザーにとって役立つ可能性があるため、単純に削除することはできません。

それで、武器ライブラリをチェックしました。サーバー側では、それらを処理するには機能が多すぎることがわかりました。
通常のエクスプレッションとは別に、

htmlspecialchars, htmlspecialchars_decode, addslashes, stripslashes
urlencode, urldecode, mysql_escape_string, mysql_real_escape_string

javascriptを使用するクライアント側では、それほど多くはありませんが、まだ持っています。

escape, unescape

わかった。私がたくさんの武器を持っていることを知ることは良いことですが...それらをどのように選び、組み合わせ、そして使うかは私にとって本当に頭痛の種です。

たとえば、次のような製品名が必要だとします。

'%Hooray%' +&ABC

実生活ではこのような名前の製品はないかもしれませんが、例として使用してみましょう。

&マークはPOSTメッセージを壊します。
+はajax解析に影響を与える可能性があります。
一重引用符でSQLインジェクションが可能になる場合があります。
%マークは問題を引き起こす可能性がありますが、問題が発生するかどうかはわかりません。

ただし、データベースに送信してフェッチした後でも、その名前をまったく同じにしたいのです。つまり、データベース
内の名前は異なっていても、ブラウザでの表示は同じである必要があります。

この質問は少し長すぎるかもしれませんが、誰かが良い経験を共有できることを願っています:これらの関数を使用してユーザー入力文字列を処理する方法は?

4

2 に答える 2

2

サーバー側で必要なのは、DB を安全に保つ (SQL インジェクションを回避する) ために、準備済みステートメント、別名パラメーター化されたクエリです。

クライアント側では、innerText や innerHTML ではなく、オブジェクトと DOM 操作が定義された JSON をお勧めします。ブラウザは、投稿を行うために必要なすべてをエスケープします。

于 2012-06-21T06:14:25.767 に答える
2

ajax経由でデータを送信する前に、データをエンコードします。データがjavascript 配列であると仮定します。なぜ配列?既にクエリがある場合 (例: 'name=me&foo=b&ar')、どうすればその 'b& ar ' を解決することができますか?

for(i in arr)
   { arr[i] = encodeURIComponent(arr[i]); }

この関数は、すべての有害な URL 文字 (, / ? : @ & = + $ #) などを置き換えます。次に、次のように構築してクエリを送信できますが、arr.join(''); jquery を使用して、直後に配列を送信します。

PHP 側で従わなければならない基本的な規則は、絶対にデータを保存しないことです。mysql_real_escape_string();

于 2012-06-21T06:36:46.657 に答える