Impact ストアアプリケーションのプロアクティブコードチェックスキャンスイートマトリクス
PCC スキャン中に実行されるチェックの詳細については、プロアクティブコードチェック (PCC) スキャンスイートマトリクスを参照してください。
| カテゴリ | 名前 | Short_description | 説明 |
|---|---|---|---|
| パフォーマンス | HSD0001049 グローバル UI スクリプトの回避 | グローバル UI スクリプトの回避 | グローバル UI スクリプトは、その中のコードが呼び出されていない場合でも、ServiceNow のすべてのシングルページ/フォームにロードされます。 |
| 管理性 | HSD0001058 SCRIPT:スコープ対象のアプリで、ログ記録ユーティリティまたは非推奨のメソッドが使用されています | スコープ対象のアプリで、ログ記録ユーティリティまたは非推奨のメソッド:gs.log が使用されています | スコープ対象のアプリケーションでは、従来のメソッドではなく、スコープ対象のログ記録 API を使用する必要があります。 |
| 管理性 | HSD0001058 XML:スコープ対象のアプリで、ログ記録ユーティリティまたは非推奨のメソッドが使用されています | スコープ対象のアプリで、ログ記録ユーティリティまたは非推奨のメソッド:gs.log が使用されています | スコープ対象のアプリケーションでは、従来のメソッドではなく、スコープ対象のログ記録 API を使用する必要があります。 |
| パフォーマンス | HSD0001116 クライアントスクリプトはグローバルテーブルに対して定義しないでください | クライアントスクリプトはグローバルテーブルに対して定義しないでください | グローバルクライアントスクリプトは、選択したテーブルがグローバルである任意のクライアントスクリプトです。グローバルクライアントスクリプトにはテーブルの制限はありません。したがって、システム内のすべてのページに読み込まれ、プロセスにブラウザの読み込み遅延が発生します。この種のスクリプトをすべてのページにロードするメリットはありません。 |
| パフォーマンス | HSD0001126 SCRIPT:現在のオブジェクトから sys_id への不要なドット連結 | 現在のオブジェクトから sys_id への不要なドット連結 | 参照フィールドには、参照されるレコードの Sys ID が既に保存されています。gr.fieldname.sys_id の使用はドット連結であり、同じ値を返すためだけに別のクエリを実行するようにプラットフォームに指示します。これは不要なオーバーヘッドです。 |
| パフォーマンス | HSD0001126 XML:現在のオブジェクトから sys_id への不要なドット連結 | 現在のオブジェクトから sys_id への不要なドット連結 | 参照フィールドには、参照されるレコードの Sys ID が既に保存されています。gr.fieldname.sys_id の使用はドット連結であり、同じ値を返すためだけに別のクエリを実行するようにプラットフォームに指示します。これは不要なオーバーヘッドです。 |
| パフォーマンス | HSD0001128 SCRIPT:クライアント側のコードでは同期 AJAX メソッドを使用しないでください | クライアント側のコードでは同期 AJAX メソッドを使用しないでください | 同期 AJAX を使用するコードでは、UI イベントの処理に遅延が生じる可能性があります。パフォーマンスに悪影響を及ぼし、ユーザーエクスペリエンスに悪影響を与える可能性があります。可能な限り、非同期 AJAX を採用するようにしてください。 |
| アップグレード可能性 | HSD0001142 SCRIPT:クライアント側のコードでは DOM 操作手法を使用すべきではありません | クライアント側のコードでは DOM 操作手法を使用すべきではありません | このカスタマイズ手法では多くの制御が可能ですが、アップグレードの問題が頻繁に発生します。jQuery、PrototypeJS、gel、その他の手法は使用しないことをお勧めします。 |
| 管理性 | HSD0001153 SCRIPT:ハードコードされたインスタンス URL | ハードコードされたインスタンス URL | ハードコードされたインスタンス URL の使用は、環境全体の機能に悪影響を及ぼす可能性があるため、検索結果を報告します。 |
| 管理性 | HSD0001153 XML:ハードコードされたインスタンス URL | ハードコードされたインスタンス URL | ハードコードされたインスタンス URL の使用は、環境全体の機能に悪影響を及ぼす可能性があるため、検索結果を報告します。 |
| 管理性 | HSD0001174 REST:データを直接書き込むスクリプト化 Web サービス | データを直接書き込むスクリプト化 Web サービス | スクリプト化 Web サービスではデータが直接挿入/更新/削除されますが、スクリプトインクルードはデータ操作を管理するための構造化され文書化されたアプローチを提供し、プラットフォーム内の一貫性、セキュリティ、保守性を保証するため、スクリプトインクルードの使用が推奨されます。 |
| 管理性 | HSD0001174 SOAP:データを直接書き込むスクリプト化 Web サービス | データを直接書き込むスクリプト化 Web サービス | スクリプト化 Web サービスではデータが直接挿入/更新/削除されますが、スクリプトインクルードはデータ操作を管理するための構造化され文書化されたアプローチを提供し、プラットフォーム内の一貫性、セキュリティ、保守性を保証するため、スクリプトインクルードの使用が推奨されます。 |
| セキュリティ | HSD0001235 XML:Jelly タグ内で動的 JEXL 式を使用しないようにしてください | Jelly タグ内で動的 JEXL 式を使用しないようにしてください | Jelly コードを記述する場合は、Jelly タグ (フェーズ 2 の場合は <g2:evaluate>) 内で動的 JEXL 式を使用しないでください。コードは機能しているように見えますが、Java 仮想マシンのメモリリソース (PermGen と呼ばれる) に影響を与えるため、パフォーマンスの問題や時間の経過とともにシステムの停止につながる可能性があります。<g:evaluate> タグ内で JEXL 式を使用する例外は、${AMP}\、${AND}、${GT}、${LT}、${SP} (および対応するフェーズ 2 の $[AMP]、$[AND] など) を含む静的値を使用する場合です。 |
| アップグレード可能性 | HSD0001247 廃止された API RESTMessage (V1) の使用 | 廃止された API RESTMessage (V1) の使用 |
JavaScript を使用して送信 REST メッセージを送信できる API。 ただし、RESTMessage のバージョン 1 は廃止されました。 |
| 管理性 | HSD0001275 スクリプトにハードコードされた ID を含めることはできません | スクリプトにハードコードされた ID を含めることはできません | sys_idsをハードコーディングすると、システムの管理が難しくなり、インスタンス間で機能を移動できにくくなります。 |
| 管理性 | HSD0001278 ビジネスルールの前では、他のテーブルで update() または insert() を使用しないでください | ビジネスルールの前では、他のテーブルで update() または insert() レコードを使用しないでください | onBefore BR で insert() または update() を実行すると、更新がキャンセルされる場合でも、他のテーブルが更新されます。 |
| 管理性 | HSD0001281 メッセージキーをプリロードせずに、クライアントスクリプトで getMessage() を呼び出しました | メッセージキーをプリロードせずに、クライアントスクリプトで getMessage() を呼び出しました | クライアントスクリプトで使用される getMessage では、スクリプトレコードの [メッセージ] フィールドにメッセージキーを追加する必要があります。 |
| 管理性 | HSD0001312 SCRIPT:コードで console.log() を使用しないようにしてください | コードに console.log() デバッグメソッドを含めるべきではありません | クライアント側の関数console.logにより、特定のバージョンのブラウザでエラーが発生する可能性があります。さらに、記録されているのは一般に公開されたくない情報であり、悪意のある人物がスクリプトを操作してPIIを反映させる可能性は十分にあります。コンソールログを有効にした状態で本番環境に移行することは決してお勧めできません。Console.logはサーバー側では無効であるため、サーバー側には配置しないでください。 |
| 管理性 | HSD0001312 XML:コードで console.log() を使用しないようにしてください | コードに console.log() デバッグメソッドを含めるべきではありません | クライアント側の関数console.logにより、特定のバージョンのブラウザでエラーが発生する可能性があります。さらに、記録されているのは一般に公開されたくない情報であり、悪意のある人物がスクリプトを操作してPIIを反映させる可能性は十分にあります。コンソールログを有効にした状態で本番環境に移行することは決してお勧めできません。Console.logはサーバー側では無効であるため、サーバー側には配置しないでください。 |
| パフォーマンス | HSD0001338 ビジネスルールはグローバルテーブルで定義しないでください | ビジネスルールはグローバルテーブルで定義しないでください (グローバルビジネスルール) | グローバルビジネスルールとは、選択したテーブルがグローバルであるビジネスルールのことです。他のスクリプトは、グローバルビジネスルールを呼び出すことができます。グローバルビジネスルールには条件やテーブルの制限がなく、システム内のすべてのページに負荷がかかります。 |
| パフォーマンス | HSD0001347 SCRIPT:クライアント側のコードでは GlideRecord を使用しないでください | クライアント側のコードでは GlideRecord を使用しないでください | クライアント側の GlideRecord オブジェクトは、不要なデータが大量に返されるため、効率が悪いことがよくあります。GlideRecord と g_form.getReference の両方が関係しています。 |
| パフォーマンス | HSD0001358 SCRIPT:サーバー側のコードでは GlideRecord.getRowCount() を使用しないでください | サーバー側のコードではレコードをカウントするのに GlideRecord.getRowCount() を使用しないでください | GlideRecord.getRowCount() は、データベースの組み込み算術関数を使用せずに結果セット全体を取得することで機能します。GlideAggregate はデータベースを使用するため、多くの場合、大幅に高速になります。この推奨事項の例外は、レコードをループして処理する場合です。 |
| パフォーマンス | HSD0001358 XML:サーバー側のコードでは GlideRecord.getRowCount() を使用しないでください | サーバー側のコードではレコードをカウントするのに GlideRecord.getRowCount() を使用しないでください | GlideRecord.getRowCount() は、データベースの組み込み算術関数を使用せずに結果セット全体を取得することで機能します。GlideAggregate はデータベースを使用するため、多くの場合、大幅に高速になります。この推奨事項の例外は、レコードをループして処理する場合です。 |
| 管理性 | HSD0001392 スクリプトでは eval() メソッドを使用しないでください | スクリプトでは eval() メソッドを使用しないでください | eval() 関数は、引数を評価または実行します。eval() を不適切に使用すると、コードがインジェクション攻撃にさらされ、エラーとともに行番号が表示されないため、デバッグがより困難になる可能性があります。 |
| パフォーマンス | HSD0001554a JDBC データソースで「前回実行日時を使用」が更新セットで無効になっています | JDBC データソースでは、[前回実行日時を使用] オプションをオンにする必要があります | 変更されていないデータを繰り返しインポートすると、多くの行がスキップされ、システムリソースが不必要に制限されます。 |
| パフォーマンス | HSD0001560 ngRepeat ループで「track by」を使用します | ngRepeat ループで「track by」を使用します | 「track by」句なしで ngRepeat ディレクティブを使用すると、ソースデータが更新されるたびに DOM 要素が破棄され、再構築されます。一意のキー (sys_id など) を持つ 'track by' 句を追加すると、DOM 要素を再構築するのではなく再利用できるため、大規模で複雑なリストを含むページのパフォーマンスが大幅に向上します。 |
| 管理性 | HSD0001578 ビジネスルールでは、SOAP getResponse() メソッドを使用しないでください | ビジネスルールでは、SOAP getResponse() メソッドを使用しないでください | getResponse はトランザクションをブロックし、応答が受信されるまで待機します。これは非同期的に行うことをお勧めします。 |
| パフォーマンス | HSD0001623 読み取り ACL (セキュリティルール) に GlideRecord/GlideAggregate を含めることはできません | 読み取り ACL (セキュリティルール) に GlideRecord/GlideAggregate を含めることはできません | 読み取り ACL は頻繁に実行されます。複雑なデータベースルックアップを使用すると、パフォーマンスが低下する可能性があります。 |
| セキュリティ | HSD0002016 ウィジェット内のサーバースクリプトでは GlideRecordSecure を使用する必要があります | ウィジェット内のサーバースクリプトでは GlideRecord ではなく GlideRecordSecure を使用する必要があります |
ベストプラクティスは、ウィジェット内のサーバースクリプトでは GlideRecord ではなく GlideRecordSecure を使用することです。これは、すべてのサーバーとのやり取りでセキュリティ ACL が考慮されるようにするためです。これからの逸脱を検出するには、GlideRecord のインスタンス化を検出結果としてマークする必要があります。 $sp.getRecord() は現在 GlideRecord オブジェクトを返します。この呼び出しは、可能な限り安全にするために、実際には GlideRecordSecure オブジェクトを返す必要があります。これはヘルススキャンツール以外の別の拡張機能ですが、ヘルススキャンが $sp.getRecord によって返された GlideRecord オブジェクトの使用を検出するのが難しくなるという課題があります。 |
| パフォーマンス | HSD0002144 c.server.get() を活用してウィジェットのパフォーマンスを向上させます | c.server.get() を活用してウィジェットのパフォーマンスを向上させます | クライアントスクリプトでは、c.server.get() を使用して特定のデータをサーバースクリプトに渡すことができます。これを行うと、データオブジェクト全体を送信する c.server.update() よりもパフォーマンスが向上する可能性があります。 |
| パフォーマンス | HSD0002150 ウィジェットクライアントスクリプトから未使用のサービスを削除します。 | ウィジェットクライアントスクリプトから未使用のサービスを削除します。 | 挿入されたサービスがウィジェットのクライアントコントローラースクリプトで使用されていない場合は、それらを削除することを検討してください。挿入されて使用されないサービスはインスタンス化され、パフォーマンスに影響を与える可能性があります。また、コードの可読性の観点からも、必要なサービスのみを挿入することをお勧めします。 |
| パフォーマンス | HSD0002154 ウィジェットのクライアントスクリプトで $rootScope.$on を使用しないでください。 | ウィジェットのクライアントスクリプトで $rootScope.$on を使用しないでください。 |
$rootScope.$on はサービスでのみ使用する必要があります。ウィジェットのクライアントコントローラースクリプトの$rootScopeでイベントリスナーを使用すると、リスナーを手動で破棄しないとメモリリークが発生する可能性があります。ウィジェットがロードされるたびにコントローラーが初期化され、$rootScopeで初期化されたすべてのリスナーは、手動で行わない限り、コントローラーで破棄されません。 サービスには、$rootScopeでイベントを発生させ、$rootScopeでイベントをリッスンする以外に方法はありません。これは、サービスがアプリ全体で一度初期化され、独自のスコープを持たないためです。サービスで $rootScope.$on を使用してもかまいません。 |
| 管理性 | HSD0002808 クライアントスクリプト (説明なし) | クライアントスクリプト (説明なし) | クライアントスクリプトの説明が空であるか、非常に短いか、スクリプト名と同じです。 |
| 管理性 | HSD0002808 スクリプトインクルード (説明なし) | スクリプトインクルード (説明なし) | スクリプトインクルードの説明が空であるか、非常に短いか、スクリプト名と同じです。 |
| 管理性 | HSD0002827 すべてのイベントには説明が必要です | すべてのイベントには説明が必要です | イベントレジストリ内のすべてのカスタムイベントに [説明] フィールドを設定する必要があります。これにより、レジストリエントリを作成しなかった管理者がイベントの目的を簡単に識別できるようになり、インスタンスの保守性が向上します。 |
| 管理性 | HSD0002828 すべてのイベントに [実行者] フィールドを設定する必要があります | すべてのイベントに [実行者] フィールドを設定する必要があります | イベントレジストリ内のすべてのカスタムイベントに [fired_by] フィールドを設定する必要があります。これにより、レジストリエントリを作成しなかった管理者がイベントのトリガーを簡単に識別できるようになり、インスタンスの保守性が向上します。 |
| 管理性 | HSD0003076 SOAP メッセージ定義でのベーシック認証情報 | SOAP メッセージ定義でのベーシック認証情報 | 送信 SOAP メッセージのベーシック認証では、関数定義自体に認証情報を配置するのではなく、ベーシック認証プロファイルを使用する必要があります。 |
| 管理性 | HSD0003081 REST メッセージ定義でのベーシック認証情報 | REST メッセージ定義でのベーシック認証情報 | 送信 REST メッセージのベーシック認証では、関数定義自体に認証情報を配置するのではなく、ベーシック認証プロファイルを使用する必要があります。 |
| アップグレード可能性 | HSD0003307 変更要求テーブルは拡張しないでください | 変更要求テーブルは拡張しないでください |
変更要求を拡張する少なくとも 1 つの子テーブルが作成されました。 カスタム子テーブルを使用した変更要求の拡張は行わないでください:
|
| 管理性 | HSD0003625 ビジネスルールスクリプトは executeRule 関数でカプセル化する必要があります | ビジネスルール内のスクリプトは executeRule 関数でカプセル化する必要があります | このコードでは、executeRule 関数にカプセル化されていないコードを含むビジネスルールがあるかどうかを確認する必要があります。 |
| アップグレード可能性 | HSD0004147 GlideDialogWindow と GlideOverlay の使用 | GlideDialogWindow と GlideOverlay の使用 | GlideDialogWindow と GlideOverlay が使用されていないか確認します。これは ATF ではテストできません。 |
| パフォーマンス | HSD0004365 SCRIPT:スクリプトの一部としてキャッシュがフラッシュします | スクリプトの一部としてキャッシュがフラッシュします | ootb 以外のスクリプト実行の一部としてキャッシュのフラッシュがトリガーされた場合、プラットフォームは BAU ステータスに戻る前にキャッシュを再構築する必要があります。このアクティビティはパフォーマンスに大きな影響を与えます。 |
| パフォーマンス | HSD0004726 スクリプトデバッガはスクリプトでは使用しないでください | デバッガはスクリプトでは使用しないでください | debugger ステートメントは、実行中の JavaScript 環境に対して、実行を停止し、コード内の現在のポイントでデバッガーを起動するように指示するために使用されます。これは、最新のデバッグおよび開発ツールの出現により、良い習慣として支持されなくなりました。本番コードにデバッガを含めると、ブラウザがコードの実行を停止し、適切なデバッガを開くため、絶対に含めないでください。 |
| パフォーマンス | HSD0006666 ビジネスルールで current.update() が使用されているかどうかを確認します | ビジネスルールで current.update() が使用されているかどうかを確認します | ビジネスルールで使用される Current.update() は、再帰的な更新を引き起こし、パフォーマンスに大きな影響を与える可能性があります。 |
| 管理性 | HSD0013213 SCRIPT addInfoMessage() の使用でハードコードされた文字列が検出されました | addInfoMessage() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側とサーバー側の両方の addInfoMessage() でこのような発生を検出します。 |
| 管理性 | HSD0013213 XML addInfoMessage() の使用でハードコードされた文字列が検出されました | addInfoMessage() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側とサーバー側の両方の addInfoMessage() でこのような発生を検出します。 |
| 管理性 | HSD0013215 SCRIPT:alert() の使用でハードコードされた文字列が検出されました | alert() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側の alert() でこのような発生を検出します。 |
| 管理性 | HSD0013215 XML:alert() の使用でハードコードされた文字列が検出されました | alert() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側の alert() でこのような発生を検出します。 |
| 管理性 | HSD0014228 SCRIPT:addErrorMessage() の使用でハードコードされた文字列が検出されました | addErrorMessage() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側とサーバー側の両方の addErrorMessage() でこのような発生を検出します。 |
| 管理性 | HSD0014228 XML:addErrorMessage() の使用でハードコードされた文字列が検出されました | addErrorMessage() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側とサーバー側の両方の addErrorMessage() でこのような発生を検出します。 |
| 管理性 | HSD0014229 SCRIPT:setError() の使用でハードコードされた文字列が検出されました | setError() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。サーバー側のsetError()でこのような発生を検出します。 |
| 管理性 | HSD0014229 XML:setError() の使用でハードコードされた文字列が検出されました | setError() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。サーバー側のsetError()でこのような発生を検出します。 |
| 管理性 | HSD0014231 SCRIPT:confirm() の使用でハードコードされた文字列が検出されました | confirm() の使用でハードコードされた文字列が検出されました:SCRIPT | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側のconfirm()でこのような発生を検出します。 |
| 管理性 | HSD0014231 XML:confirm() の使用でハードコードされた文字列が検出されました | confirm() の使用でハードコードされた文字列が検出されました:XML | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側のconfirm()でこのような発生を検出します。 |
| 管理性 | HSD0014232 SCRIPT:prompt() の使用でハードコードされた文字列が検出されました | prompt() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側の prompt() でこのような発生を検出します。 |
| 管理性 | HSD0014232 XML:prompt() の使用でハードコードされた文字列が検出されました | prompt() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側の prompt() でこのような発生を検出します。 |
| 管理性 | HSD0014233 SCRIPT:addMessage() の使用でハードコードされた文字列が検出されました | addMessage() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。サーバー側のaddMessage()でこのような発生を検出します。 |
| 管理性 | HSD0014233 XML:addMessage() の使用でハードコードされた文字列が検出されました | addMessage() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。サーバー側のaddMessage()でこのような発生を検出します。 |
| 管理性 | HSD0014234 SCRIPT:addFormMessage() の使用でハードコードされた文字列が検出されました | addFormMessage() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側の addFormMessage() でこのような発生を検出します。 |
| 管理性 | HSD0014234 XML:addFormMessage() の使用でハードコードされた文字列が検出されました | addFormMessage() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側の addFormMessage() でこのような発生を検出します。 |
| 管理性 | HSD0014544 SCRIPT:addWarningMessage() の使用でハードコードされた文字列が検出されました | addWarningMessage() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側とサーバー側の両方の addWarningMessage() でこのような発生を検出します。 |
| 管理性 | HSD0014544 XML:addWarningMessage() の使用でハードコードされた文字列が検出されました | addWarningMessage() の使用でハードコードされた文字列が検出されました | コード内のハードコードされたメッセージ/文字列はローカライズされません。クライアント側とサーバー側の両方の addWarningMessage() でこのような発生を検出します。 |