正規表現-ユーザーがコードを送信できるようにするために、PHPで何を置き換えるか?
こんにちは。ユーザーがコードの一部(php、java、javascript c ++など...好きなように)を送信できるようにする予定です。
それで、誰かが私のサイトの安全を確保するためのベストプラクティスを提案できますか? :))
コード文字列が送信された後、phpでエスケープするタグ/文字/文字列を意味しますか?
答え :
解決策:
コードを画面に表示することを目的としている場合は、データベースに保存する前に、コードをエスケープしたり置き換えたりする必要はありません(保存する場合)。もちろん、これは、たとえば mysql_real_escape_string() (またはRDBMSの同等のサニタイズルーチン)などを介したデータベース挿入のエスケープには適用されません。そのステップはまだ絶対に必要です。
コードを表示するときは、次の点に注意してください。
-
eval()
またはシステムコールを介して送信されたコードを評価しないでください。 -
コードをブラウザに表示するときは、
htmlspecialchars()
。エスケープせずに表示しないでください。そうしないと、クロスサイトスクリプティングの脆弱性が発生します。
答え :
解決策:
クエリでプレースホルダーを使用すると、入力をエスケープする必要もありません。 プレースホルダー、バインディング、およびプリペアドステートメントは間違いなく推奨される方法です。
ハンドルを再利用して入力を変更するだけなので、1つを超えるクエリの方が高速です。
より安全です。文字列はクエリでは解釈されません...これまで。保存するものは、取得するものです。
適切な例を示すために、ターゲットSQLについてもう少し知る必要がありますが、ここにいくつかのリンクがあります:
PDOスタイルのバインディング: http://docs.php.net/pdo.prepared-statements
MySqliスタイルのバインディング: http://docs.php.net/manual/en /mysqli-stmt.bind-param.php
読み返したら、
で表示します htmlspecialchars($string, ENT_QUOTES);
ENT_QUOTESオプションを使用すると、一重引用符と二重引用符の両方を確実にエスケープできます。
答え :
解決策:
私は専門家ではありませんが(これについては昨日しか知らされていません)、少なくともHTMLについては、htmlentitiesを試して使用することができます(これ)。
HTMLエンティティを使用して変換されると、プレーンテキストになるため、ブラウザで開くと、タグとすべてが表示されます(たとえば、 元に戻す必要がある場合は、html_entity_decode関数を使用できると思いますが、推測を賭けて、元に戻す必要はないと推測します。
他の言語の場合、私はあなたが何をすべきかわかりません。 <a href="blah blah"> と表示されます)。ログなどに書き込まれ、テキストベースのエディタで開くと、htmlエンティティを表すいくつかのシンボルとshnazが表示されます。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。