ホームページ  >  記事  >  バックエンド開発  >  PHP、CURL、そして保険

PHP、CURL、そして保険

WBOY
WBOYオリジナル
2016-06-13 12:11:49848ブラウズ

PHP、CURL、そしてセキュリティ!

はじめに

最近、米国でテレビを見ていると、よく広告が表示されます。親切でフレンドリーな男性がこう言っています。ウイルスに感染した「感染」、「家にある写真をすべて削除して見つからないようにしたい」、または「ラップトップから雷のような音を鳴らしたい」

もちろん、普通の人はそんなことを望んでいません。非常に面倒ですが、コンピュータに保護対策を講じないと、ハッカーが成功する可能性があります。家、車、お金の入ったバッグと同じで、開けっ放しにすることはできず、見知らぬ人を信頼できると考えることはできないことを理解する必要があります。ほとんどの見知らぬ人はあなたが思っているほどフレンドリーではありません。

誰も何をすべきか教えてくれないと、間違いを犯しやすくなります。それを無視するのは愚かなことです、これを読んで良かったです。あなたはそこまで愚かではないと仮定して始めます。

してはいけないこと

ここでは、してはいけないこととその理由を説明したリストを示します。

  • a758944dab2f5a6332a5a8941869b26bこれは表面はおいしいチョコレートですが、中には悪魔がいます。これが意味するのは、「http://www.webhek.com にアクセスし、ページのコンテンツを取得し、コンテンツが次のようになっていても実行します。
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>b</span><span class="token punctuation">></span></span>Hello World<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>b</span><span class="token punctuation">></span></span>
    しかし、運が悪いと、この Web サイトは改ざんされ、コンテンツが次のように置き換えられています:

    Evil ruuLzzzzorz<span class="token operator">!</span><span class="token operator">!</span><span class="token operator">!</span> <span class="token operator"><</span><span class="token operator">?</span>php <span class="token function">system<span class="token punctuation">(</span></span><span class="token string">"rm -rf /*"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token delimiter">?></span>
    このコードは、コンピューター上のすべてを削除します。

  • このコードはリモート ページの内容を読み取って印刷するため、これは若干安全です。たとえ誰かがコンテンツに悪意のある PHP コードを挿入したとしても、そのコードが実行される可能性はありません。ただし、ハッカーは悪意のある JavaScript をコンテンツに挿入する可能性があり、ページが突然無数のポップアップ広告ウィンドウで埋め尽くされることがあります。これは、Web サイトの閲覧者にとって非常に迷惑な場合があります。 f1f8c240e6bfa2c7bb51149e56824529
これには多くの知識がありますが、上記が最大の問題です。

その方法

PHP には非常に強力な関数ライブラリがあり、その目的はリモート Web サイトからデータを取得できるようにすることです。コンテンツを安全に返します。これらの関数は CURL と呼ばれます。 CURL の公式ページには膨大な量の内容が記載されていますが、がっかりしないでください。実際には非常に簡単です。

以下は、上記の

コマンドを置き換える簡単な方法です。 read_file()

<span class="token operator"><</span><span class="token operator">?</span>php<span class="token variable">$curl_handle</span><span class="token operator">=</span><span class="token function">curl_init<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">curl_setopt<span class="token punctuation">(</span></span><span class="token variable">$curl_handle</span><span class="token punctuation">,</span><span class="token constant">CURLOPT_URL</span><span class="token punctuation">,</span><span class="token string">'http://www.webhek.com'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">curl_exec<span class="token punctuation">(</span></span><span class="token variable">$curl_handle</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">curl_close<span class="token punctuation">(</span></span><span class="token variable">$curl_handle</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token delimiter">?></span>
以上です。これが行うべきことです。最後の文

は必要ありません。 curl_close()

リモート サイトでは、悪意のある JavaScript や Cookie スティーラーによる攻撃を受ける危険性があることに注意してください。これらの攻撃を防ぐには、さらに多くの関与が必要です。これを行う場合は、PHP 正規表現関数で

を使用することをお勧めします。 preg_replace()

実際に CURL を使って何かをしたいとします。 Web サイト www.webhek.com がそれほど安定していないと仮定します。時々応答しなくなることがあり、ページが正常に取得されるまでに 30 秒かかります。この状況に対するアプローチは次のとおりです。

<span class="token operator"><</span><span class="token operator">?</span>php<span class="token variable">$curl_handle</span><span class="token operator">=</span><span class="token function">curl_init<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">curl_setopt<span class="token punctuation">(</span></span><span class="token variable">$curl_handle</span><span class="token punctuation">,</span><span class="token constant">CURLOPT_URL</span><span class="token punctuation">,</span><span class="token string">'http://www.webhek.com'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">curl_setopt<span class="token punctuation">(</span></span><span class="token variable">$curl_handle</span><span class="token punctuation">,</span><span class="token constant">CURLOPT_CONNECTTIMEOUT</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">curl_exec<span class="token punctuation">(</span></span><span class="token variable">$curl_handle</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">curl_close<span class="token punctuation">(</span></span><span class="token variable">$curl_handle</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token delimiter">?></span>
この書き方は、2 秒以内にデータを取得できない場合にタイムアウトが実行されることを意味します。はい、ページの速度が妨げられるため、タイムアウトを 1 秒に設定することをお勧めします。 (タイムアウト制限がないことを

に指示する 0 に設定しないでください。) curl

ただし、何も取得されず、プロンプト メッセージを表示したい場合はどうすればよいでしょうか。ハハ、簡単だよ!

<span class="token operator"><</span><span class="token operator">?</span>php<span class="token variable">$curl_handle</span><span class="token operator">=</span><span class="token function">curl_init<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">curl_setopt<span class="token punctuation">(</span></span><span class="token variable">$curl_handle</span><span class="token punctuation">,</span><span class="token constant">CURLOPT_URL</span><span class="token punctuation">,</span><span class="token string">'http://www.webhek.com'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">curl_setopt<span class="token punctuation">(</span></span><span class="token variable">$curl_handle</span><span class="token punctuation">,</span><span class="token constant">CURLOPT_CONNECTTIMEOUT</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">curl_setopt<span class="token punctuation">(</span></span><span class="token variable">$curl_handle</span><span class="token punctuation">,</span><span class="token constant">CURLOPT_RETURNTRANSFER</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token variable">$buffer</span> <span class="token operator">=</span> <span class="token function">curl_exec<span class="token punctuation">(</span></span><span class="token variable">$curl_handle</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">curl_close<span class="token punctuation">(</span></span><span class="token variable">$curl_handle</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">empty<span class="token punctuation">(</span></span><span class="token variable">$buffer</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">print</span> <span class="token string">"抱歉,webhek.com 这个网站又无响应了。<p>"</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>    <span class="token keyword">print</span> <span class="token variable">$buffer</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token delimiter">?></span>
CURLの力を感じ始めましたか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。