post と get の違い
重要なポイント:
*。Post がデータを送信する場合、URL にデータを表示する必要はありませんが、Get メソッドは URL に表示する必要があります。
*.Post は 2M に達する可能性がある大量のデータを送信しますが、Get メソッドは URL の長さの制限により約 1024 バイトしか転送できません。その名前が示すように、サーバーにデータを送信します。セグメント、Get はサーバー セグメントからのデータの取得を表します。 Get がデータの送信もできる理由は、必要なデータの種類をサーバーに伝えるためです。 Post 情報は http リクエストの内容として使用され、Get は Http ヘッダーで送信されます。
詳細な説明:
1. Get は、URL リクエストを通じてユーザーのデータを転送し、フォーム内の各フィールドの名前とその内容をペアの文字列として接続し、アクションが指すプログラムの URL に配置します。ユーザーがリンクをクリックするのと同じように、データは URL に直接表示されます Post メソッドは、HTTP 投稿メカニズムを使用して、フォーム内の各フィールドの名前とそのコンテンツを HTML ヘッダー (ヘッダー) に配置します。参照されるプログラム処理では、標準入力 (stdin) メソッド2 を使用してフォーム データを読み取り、処理します。変数の値を取得します。
Post メソッドは、Request.Form
を使用して、送信されたコンテンツにアクセスします。3. Get メソッドによって送信されるデータの量は非常に小さく、通常は約 2 KB に制限されますが、実行効率は Post メソッドよりも優れています。
Post メソッドによって送信されるデータの量は比較的大きいです。 、サーバーがデータを読み取るのを待っています。また、大量のデータによるサーバーへの悪意のある攻撃を避けるためのバイト制限もあります。 提案: 送信するデータを一度に送信できるかどうかわからない場合は、Post メソッドを使用してみてください
4. Get メソッドを使用してデータを送信すると、セキュリティの問題が発生するため、フォームには Post メソッドを使用することをお勧めします。送信 (ログイン ページなど、Get を介してデータを送信すると、ユーザー名とパスワードが URL に表示されます。ページをキャッシュできる場合、または他のユーザーが顧客のマシンにアクセスできる場合は、ユーザーのアカウントとパスワードを履歴レコードから取得できます。 )
5. Get はフォーム フォーム内のデータ セットの値を ASCII 文字に制限しますが、Post は ISO10646 文字セット全体をサポートします。
6. Get は Form のデフォルトのメソッドです。 HTTPプロトコルには、操作方法を示す動詞としてGET、POST、PUT、DELETEの4つがあります。これらは 4 つの基本操作に対応します:GET はリソースの取得に使用されます
POST は新しいリソースの作成に使用されます (リソースの更新にも使用できます)
DELETE はリソースの削除に使用されます。
PHP は、post/get を通じて取得したデータを自動的にエスケープします
サーバーのさまざまな構成に応じて、post または get を通じてデータを取得するときに、「,」などの特殊文字が表示される場合があります。この問題は主に PHP のマジック クォートによって引き起こされます。PHP のマジック クオートには
と出力が含まれます。データベースの文字列データに対してaddslashes()とstripslashes()操作を実行すると、データは正常に表示されますこの時点で入力データに対してaddslashes()を実行した場合、
それを出力する必要があります。余分なバックスラッシュを削除するには、stripslashes() を使用します
2. magic_quotes_gpc=off の場合、入力データを処理するために addslashes() を使用する必要がありますが、出力をフォーマットするためにstripslashes() を使用する必要はありません
addslashes() はバックスラッシュをデータベースに書き込むのではなく、php インジェクションの magic_quotes_gpc について、magic_quotes_gpc 設定がオンになっている場合は、誰もが知っています。これは、magic_quotes_gpc = on を意味します。php を知っている人なら誰でも知っています。次に、数値フィールドSELECT *を挿入する必要があります。それが正しく入力されている場合:<span> 1</span> <? <span> 2</span><span>if</span> ( <span>isset</span>(<span>$_POST</span>["f_login"<span>] ) ){ </span><span> 3</span><span>//</span><span>连接数据库</span><span> 4</span><span>$t_strUid</span> = <span>$_POST</span>["f_uid"<span>]; </span><span> 5</span><span>$t_strPwd</span> = <span>$_POST</span>["f_pwd"<span>]; </span><span> 6</span><span>$t_strSQL</span> = "SELECT * FROM tbl_users WHERE uid=<span>$t_strUid</span> AND password = '<span>$t_strPwd</span>' LIMIT 0,1"<span>; </span><span> 7</span><span>if</span> ( <span>$t_hRes</span> = <span>mysql_query</span>(<span>$t_strSQL</span><span>) ){ </span><span> 8</span><span>//</span><span> 成功查询</span><span> 9</span><span> } </span><span>10</span><span> } </span><span>11</span> ?>ログイン後にコピー
FROM tbltable_users WHERE userid=admin AND password = ' admin' LIMIT 0,1
攻撃者がユーザー名に admin OR 1 =1 # と入力した場合、挿入される SQL ステートメントは次のようになります: SELECT * FROM table_users WHERE userid=admin OR 1 =1 # AND password = 'admin' LIMIT 0,1インジェクションは以下で実行できます。
php.iniでdisplay_errorsオプションをdisplay_errors = offに設定します。これにより、エラーが防止されます。
magic_quotes_runtime
如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。
magic_quotes_sybase
如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 ”。而双引号、反斜线 和 NULL 字符将不会进行转义。
由于不同服务器的配置不同,需要在代码中用get_magic_quotes_gpc() 检测服务器配置。
<span>1</span><span>if</span>(<span>isset</span>(<span>$_POST</span>['c'<span>])){ </span><span>2</span><span>$s</span> = <span>$_POST</span>['c'<span>]; </span><span>3</span><span>if</span>(<span>get_magic_quotes_gpc</span><span>()) </span><span>4</span><span>$s</span> = <span>stripslashes</span>(<span>$s</span>);<span>//</span><span>stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。 </span><span>5</span><span>//do something</span><span>6</span> }
以上就介绍了PHP基础之POST与GET,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。