この記事では、PHP 実践チュートリアルのフィルタリング、検証、エスケープ、パスワードに関する関連情報を主に紹介します。必要な方は一緒に参照してください。
1. フィルタリング、検証、およびエスケープ
1)。自分の直接の制御下にないデータ ソースからのデータは信頼しないでください。以下が含まれますが、これらに限定されません:
$_GET
$_POST
$_REQUEST
$_COOKIE
$argv
-
php://stdin
php : //input
file_get_contents()
リモートデータベース
リモートAPI
クライアントからのデータ
2)。安全でない文字を削除するには、データがアプリケーションのストレージ層に到達する前にフィルタリングする必要があります。フィルタリングが必要なデータには、HTML、SQL クエリ、ユーザー プロファイル情報が含まれますが、これらに限定されません。
HTML:
htmlentities()
関数を使用して、HTML を対応するエンティティにフィルターします。この関数は、ストレージ層で安全にレンダリングするために、指定された HTML 文字をエスケープします。これを使用する正しい方法は、htmlentities($input, ENT_QUOTES, 'UTF-8')
を使用して入力をフィルタリングすることです。または、HTML Purifier を使用します。欠点は遅いhtmlentities()
函数过滤HTML成对应的实体。这个函数会转义制定字符的HTML字符,以便在存储层安全的渲染。正确的使用方式是使用htmlentities($input, ENT_QUOTES, 'UTF-8')
过滤输入。或者使用HTML Purifier。缺点是慢SQL查询: 有时必须根据数据构建SQL查询。这时要要使用PDO预处理语句过滤外部数据。
用户资料信息:使用
filter_var()
和filter_input()
过滤用户资料信息
3).验证数据:也可以使用filter_var()
,验证成功返回要验证的值,失败返回false。但是这个函数无法验证所有数据,所以可以使用一些验证功能组件。例如aura/filter或者symfony/validator
4)转义输出:任然可以使用htmlentities这个函数,一些模板引擎也自带了转义功能。
密码
1).绝对不能知道用户的密码。
2).绝对不要约束用户的密码,要限制的话只限制最小长度。
3).绝对不能使用电子邮件发送用户的密码。你可以发送一个修改密码的链接,上面带一个token验证是用户本人就行了。
4).使用bcrypt计算用户密码的哈希值。加密和哈希不是一回事,加密是双向算法,加密的数据可以被解密。但是哈希是单项算法,哈希之后的数据无法被还原,想同的数据哈希之后得到的数据始终是相同的。使用数据库存储通过bcrypt哈希密码之后的值。
5).使用密码哈希API简化计算密码哈希和验证密码的操作。下面的注册用户的一般操作
POST /register.php HTTP/1.1 Content-Length: 43 Content-type: application/x-www-form-urlencoded email=xiao@hello.world&password=nihao
下面是接受这个请求的PHP文件
<?php try { $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); if (!$email) { throw new Exception('Invalid email'); } $password = filter_iput(INPUT_POST, 'password'); if (!$password || mb_strlen($password) < 8) { throw new Exception('Password must contain 8+ characters'); } //创建密码的哈希值 $passwordHash = password_hash( $password, PASSWORD_DEFAULT, ['cost' => 12] ); if ($passwordHash === false) { throw new Exception('Password hash failed'); } //创建用户账户,这里是虚构的代码 $user = new User(); $user->email = $email; $user->password_hash = $passwordHash; $user->save(); header('HTTP/1.1 302 Redirect'); header('Location: /login.php'); } catch (Exception $e) { header('HTTP1.1 400 Bad Request'); echo $e->getMessage(); }
6).根据机器的具体计算能力修改password_hash()
的第三个值。计算哈希值一般需要0.1s-0.5s。
7).密码的哈希值存储在varchar(255)
SQL クエリ: 場合によっては、データに基づいて SQL クエリを構築する必要があります。現時点では、PDO 前処理ステートメントを使用して外部データをフィルターする必要があります。
ユーザー プロファイル情報: filter_var()
と filter_input()
を使用してユーザー プロファイル情報をフィルターします
3)。 filter_var() の場合、検証が成功した場合は検証対象の値を返し、失敗した場合は false を返します。ただし、この機能はすべてのデータを検証できるわけではないため、一部の検証機能コンポーネントを使用できます。例: aura/filter または symfony/validator
4) 出力のエスケープ: htmlentities 関数は引き続き使用でき、一部のテンプレート エンジンには独自のエスケープ関数もあります。パスワード
1) ユーザーのパスワードを決して知らないでください。 2). ユーザーのパスワードを制限したい場合は、最小限の長さに制限してください。 3) ユーザーのパスワードを送信するために電子メールを使用しないでください。トークンを使用してパスワードを変更するリンクを送信し、それがユーザーであることを確認できます。
4). bcrypt を使用してユーザーパスワードのハッシュ値を計算します。暗号化とハッシュは同じものではありません。暗号化は双方向のアルゴリズムであり、暗号化されたデータは復号化できます。ただし、ハッシュ化は単一のアルゴリズムであり、同じデータをハッシュ化した後に得られるデータは復元できません。 bcrypt でパスワードをハッシュした後、データベースを使用して値を保存します。
5). パスワード ハッシュ API を使用して、パスワード ハッシュの計算とパスワードの検証の操作を簡素化します。以下は、登録ユーザーの一般的な操作ですPOST /login.php HTTP1.1
Content-length: 43
Content-Type: application/x-www-form-urlencoded
email=xiao@hello.wordl&pasword=nihao
以下は、このリクエストを受け入れる PHP ファイルです
session_start(); try { $email = filter_input(INPUT_POST, 'email'); $password = filter_iinput(INPUT_POST, 'password'); $user = User::findByEmail($email); if (password_verify($password, $user->password_hash) === false) { throw new Exception(''Invalid password); } //如果需要的话,重新计算密码的哈希值 $currentHasAlgorithm = PASSWORD_DEFAULT; $currentHashOptions = array('cost' => 15); $passwordNeedsRehash = password_needs_rehash( $user->password_hash, $currentHasAlgorithm, $currentHasOptions ); if ($passwordNeedsRehash === true) { $user->password_hash = password_hash( $password, $currentHasAlgorithm, $currentHasOptions ); $user->save(); } $_SESSION['user_logged_in'] = 'yes'; $_SESSION['user_email'] = $email; header('HTTP/1.1 302 Redirect'); header('Location: /user-profile.php'); } catch (Exception) { header('HTTP/1.1 401 Unauthorized'); echo $e->getMessage(); }6) に従って、
password_hash()
を変更します。マシンの特定の計算能力 3 番目の値。ハッシュ値の計算には通常 0.1 秒から 0.5 秒かかります。 7) パスワードのハッシュ値は、varchar(255)
型のデータベース列に保存されます。 8). ユーザーにログインするための一般的なプロセス rrreee
9) PHP5.5.0 より前のパスワードハッシュ API は使用できません。成分。 🎜🎜🎜🎜関連推奨事項: 🎜🎜🎜🎜🎜🎜PHP検証🎜コードクラスValidateCode🎜🎜🎜🎜🎜🎜🎜🎜🎜PHP検証コードクラスインスタンス共有🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜phpは入力された携帯電話を確認します電話番号は正規のものですか🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜
以上がPHP 実践チュートリアル: フィルタリング、検証、エスケープ、パスワードの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません
