すぐに予約したいので、ここでは経験豊富なPHPプログラマーにとって明らかなことについて話しましょう。 しかし最近、新参者はその症状のいずれかで常にこのエラーに遭遇しています。
UPD :紳士、カルマに静かに吐き出すなんて! 投稿でまったく気に入らないものを書くのは本当に難しいですか?
男性が自分の最初(2番目、3番目)のサイトを作成します。 彼は全体を情報ポータルと呼んでいます。 始めるのは便利です。 そして、その人は自分のサイトにサードパーティのサイトからインフォーマーを配置することにしました。 多くのサイトは、これらの目的のために特別なサービスを提供しています。 たとえば、Gismeteoはページに挿入するためのhtmlコードを配布します。多くの銀行は、情報提供者に為替レートのコードも提供します。 しかし、目的のサイトがそのようなサービスを提供していない場合はどうでしょうか?
ここでもう一度予約をする必要があります。 他人のサイトから許可なく情報を投稿することの合法性に関する議論を省略しましょう。 私はそのような行動を歓迎しませんが、人がする必要がある場合...
そのため、私たちの新人は、適切な場所に目的のURLからページを挿入することにしました。 ソースにあるもの:
...
include "http://...";
...
これはひどいです。 これは非常に悪いです。 これがどれほどひどいのか理解していない人のために:
- 原則として、リモートサイトが情報提供者に正当なコードを提供しない場合、代わりに、独自のヘッダー、独自のエンコーディングなどを備えた完全なHTMLページを取得します。 少なくともひどく見えますが、サイトの全体的なデザインには適合しません。 そして、ほとんどの場合、それは単にページレイアウトを壊します。
- includeコマンドは、URLのリクエストで受け取ったテキストを単純に取得し、PHP sourceなどのプログラムの現在の場所に挿入します。 これは、一方で、サイト管理者が特別に細工されたページにPHPコードを指定すると、このコードがサーバー上ですぐに実行されることを意味します。 これは最も一般的な注入です。 驚いた新人の前で、私はこのインクルージョンで彼のサーバーをリロードするページを作りました。 ここでは、ほとんどのホスティングサイトで、リモートインクルージョンが無効になっていると言うこともできます。
結論として、サードパーティのコンテンツを挿入する方法を説明します。
PHPはcurlなどの優れたツールをサポートしています。これにより、リモートWebサーバーからコンテンツをプルでき、非常に柔軟な設定で、実際にブラウザーをシミュレートできます。 コンテンツは変数に入れられ、処理されます。 正規表現を使用してコンテンツを処理でき、XPathまたは別のパーサーを使用してHTMLを解析できます。 いずれにしても、余分なものはすべて取り除き、有用なコンテンツ(テキスト、数字など)を裸のままにしておく必要があります。 次に、このデータの有効性がチェックされ、ネイティブページレイアウトに単純に挿入されます。
設計の中断、レイアウトの故障、PHPインジェクションはありません。
PS。 脆弱性の私の議論とデモンストレーションが初心者の同僚に望ましい効果をもたらさなかったこと、脆弱性が修正されなかったことは注目に値します。 数日後、この脆弱性を使用してサイトがハッキングされました。 間違いを繰り返さないで、見知らぬ人から学んでください。 頑張って