@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/2026/03/14/001-windows-app-security-minimum-checklist/#article>
    schema:about <https://comcomponent.com/knowledge/admin-rights/>, <https://comcomponent.com/knowledge/code-signing-cert/>, <https://comcomponent.com/knowledge/app-secrets/> ;
    schema:mentions <https://comcomponent.com/knowledge/execution-level-asinvoker/>, <https://comcomponent.com/knowledge/execution-level-requireadministrator/>, <https://comcomponent.com/knowledge/admin-privilege-separation/>, <https://comcomponent.com/knowledge/update-integrity-verification/>, <https://comcomponent.com/knowledge/unverified-update-application/>, <https://comcomponent.com/knowledge/certificate-validation-bypass/>, <https://comcomponent.com/knowledge/certificate-pinning/>, <https://comcomponent.com/knowledge/certificate-revocation-check/>, <https://comcomponent.com/knowledge/sql-injection/>, <https://comcomponent.com/knowledge/sql-string-concatenation/>, <https://comcomponent.com/knowledge/prepared-statement/>, <https://comcomponent.com/knowledge/unvalidated-dll-loading/>, <https://comcomponent.com/knowledge/dll-search-order-hijacking/>, <https://comcomponent.com/knowledge/secret-logging/>, <https://comcomponent.com/knowledge/dpapi/>, <https://comcomponent.com/knowledge/windows-service/>, <https://comcomponent.com/knowledge/desktop-app/>, <https://comcomponent.com/knowledge/unsigned-binary/>, <https://comcomponent.com/knowledge/code-signing-timestamp/>, <https://comcomponent.com/knowledge/certificate-expiry/> .

<https://comcomponent.com/knowledge/admin-rights/> a skos:Concept ;
    skos:prefLabel "管理者権限"@ja ;
    skos:definition "コンピューター全体の設定を変更できる権限。"@ja ;
    skos:altLabel "昇格"@ja ;
    ks:configuredBy <https://comcomponent.com/knowledge/execution-level-asinvoker/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/execution-level-requireadministrator/> .

<https://comcomponent.com/knowledge/code-signing-cert/> a skos:Concept ;
    skos:prefLabel "コード署名証明書"@ja ;
    skos:definition "ソフトウェアの発行元を証明し、改ざんを検出するための証明書。"@ja ;
    skos:altLabel "Authenticode証明書"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/unsigned-binary/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/update-integrity-verification/> .

<https://comcomponent.com/knowledge/app-secrets/> a skos:Concept ;
    skos:prefLabel "アプリの秘密情報"@ja ;
    skos:definition "業務アプリが扱う接続文字列・APIキーなどの秘密情報。ログオン済みマシンではドライブ暗号化では守れない。"@ja ;
    skos:altLabel "接続文字列"@ja ;
    skos:altLabel "APIキー"@ja .

<https://comcomponent.com/knowledge/execution-level-asinvoker/> a skos:Concept ;
    skos:prefLabel "asInvoker実行レベル"@ja ;
    skos:definition "アプリを昇格させず、実行したユーザーの権限のまま起動させるWindowsアプリケーションマニフェストの既定の実行レベル。"@ja ;
    skos:altLabel "asInvoker" ;
    skos:altLabel "requestedExecutionLevel asInvoker" .

<https://comcomponent.com/knowledge/execution-level-requireadministrator/> a skos:Concept ;
    skos:prefLabel "requireAdministrator実行レベル"@ja ;
    skos:definition "アプリ起動時に常に管理者権限への昇格を要求するWindowsアプリケーションマニフェストの実行レベル。"@ja ;
    skos:altLabel "requireAdministrator" ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/desktop-app/> .

<https://comcomponent.com/knowledge/desktop-app/> a skos:Concept ;
    skos:prefLabel "対話ユーザーのデスクトップアプリ"@ja ;
    skos:definition "ログオンしたユーザー本人の権限で動くデスクトップアプリケーション。"@ja .

<https://comcomponent.com/knowledge/admin-privilege-separation/> a skos:Concept ;
    skos:prefLabel "管理者権限処理の分離"@ja ;
    skos:definition "管理者権限が必要な処理だけを別プロセスやserviceに分離し、アプリ全体は昇格させずに動かす設計。"@ja ;
    skos:altLabel "broker model" ;
    skos:altLabel "権限分離"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/execution-level-requireadministrator/> .

<https://comcomponent.com/knowledge/dll-search-order-hijacking/> a skos:Concept ;
    skos:prefLabel "DLL検索順序ハイジャック"@ja ;
    skos:definition "アプリが名前だけでDLLを読み込む際、検索順序次第で意図しない場所のDLLを先に読み込んでしまう問題。"@ja ;
    skos:altLabel "DLLすり替え"@ja .

<https://comcomponent.com/knowledge/unvalidated-dll-loading/> a skos:Concept ;
    skos:prefLabel "DLLの名前だけでの読み込み"@ja ;
    skos:definition "LoadLibraryに絶対パスを指定せず、名前だけで検索順序任せに読み込む実装。"@ja ;
    skos:altLabel "LoadLibrary(name-only)" ;
    skos:altLabel "検索順序任せのDLL読み込み"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/dll-search-order-hijacking/> .

<https://comcomponent.com/knowledge/unsigned-binary/> a skos:Concept ;
    skos:prefLabel "未署名バイナリ"@ja ;
    skos:definition "コード署名が付いていない実行ファイル・DLL・インストーラー。Smart App Controlや発行者ルール運用下ではそれだけでブロック対象になり得る。"@ja ;
    skos:altLabel "未署名の実行ファイル"@ja .

<https://comcomponent.com/knowledge/code-signing-timestamp/> a skos:Concept ;
    skos:prefLabel "コード署名のタイムスタンプ"@ja ;
    skos:definition "署名時刻をRFC 3161タイムスタンプサーバーで証明する付与情報。証明書の期限が切れても署名の有効性を保つ。"@ja ;
    skos:altLabel "RFC 3161タイムスタンプ"@ja ;
    ks:mitigates <https://comcomponent.com/knowledge/certificate-expiry/> .

<https://comcomponent.com/knowledge/certificate-expiry/> a skos:Concept ;
    skos:prefLabel "証明書の期限切れ"@ja ;
    skos:definition "証明書の有効期間(NotAfter)を過ぎて検証に失敗する状態。"@ja ;
    skos:altLabel "有効期限切れ"@ja .

<https://comcomponent.com/knowledge/update-integrity-verification/> a skos:Concept ;
    skos:prefLabel "更新物の署名・ハッシュ検証"@ja ;
    skos:definition "ダウンロードした更新ファイルの署名またはハッシュを検証し、改ざんされていないことを確認する仕組み。"@ja ;
    skos:altLabel "更新の改ざん検知"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/unverified-update-application/> .

<https://comcomponent.com/knowledge/unverified-update-application/> a skos:Concept ;
    skos:prefLabel "未検証の更新適用"@ja ;
    skos:definition "HTTPでダウンロードした更新物などを検証なしでそのまま上書き適用すること。改ざんされた更新物をそのまま実行してしまう危険がある。"@ja ;
    skos:altLabel "改ざん更新の適用"@ja .

<https://comcomponent.com/knowledge/certificate-pinning/> a skos:Concept ;
    skos:prefLabel "証明書のピン留め"@ja ;
    skos:definition "対象ホストと証明書(拇印)を指定して、その組み合わせだけを例外的に許可する、検証緩和の対象を限定した実装。"@ja ;
    skos:altLabel "証明書の固定"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/certificate-validation-bypass/> .

<https://comcomponent.com/knowledge/certificate-validation-bypass/> a skos:Concept ;
    skos:prefLabel "証明書検証の常時スキップ"@ja ;
    skos:definition "ServerCertificateValidationCallbackなどで証明書検証を常にtrueとして通してしまう実装。HTTPS通信の安全性を実質無効化する。"@ja ;
    skos:altLabel "ServerCertificateValidationCallback => true" ;
    skos:altLabel "DangerousAcceptAnyServerCertificateValidator" ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/desktop-app/> .

<https://comcomponent.com/knowledge/certificate-revocation-check/> a skos:Concept ;
    skos:prefLabel "証明書の失効確認"@ja ;
    skos:definition "証明書が失効していないかを、証明書自体には書かれていない別の情報(OCSPやCRL)を取りに行って確認する処理。実装や設定によって行われるかどうかが変わる。"@ja ;
    skos:altLabel "OCSP/CRL確認"@ja .

<https://comcomponent.com/knowledge/sql-string-concatenation/> a skos:Concept ;
    skos:prefLabel "SQL文字列連結"@ja ;
    skos:definition "利用者からの入力をSQL文にそのまま連結して組み立てる実装。"@ja ;
    skos:altLabel "SQLの動的組み立て"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/sql-injection/> .

<https://comcomponent.com/knowledge/sql-injection/> a skos:Concept ;
    skos:prefLabel "SQLインジェクション"@ja ;
    skos:definition "利用者からの入力がSQL文の構造を書き換えてしまう脆弱性。"@ja ;
    skos:altLabel "SQLi" .

<https://comcomponent.com/knowledge/prepared-statement/> a skos:Concept ;
    skos:prefLabel "プレースホルダ(プリペアドステートメント)"@ja ;
    skos:definition "SQL文の組み立てを全てプレースホルダで実装する実装方式。IPAがSQLインジェクションの根本的解決として挙げる対策で、原理的に脆弱性が生じ得ないとされる。"@ja ;
    skos:altLabel "静的プレースホルダ"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/sql-injection/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/desktop-app/> .

<https://comcomponent.com/knowledge/secret-logging/> a skos:Concept ;
    skos:prefLabel "ログへの機密情報出力"@ja ;
    skos:definition "パスワードやBearer token、API キー、接続文字列、個人情報などをログや例外メッセージにそのまま出力すること。"@ja ;
    skos:altLabel "トークンのログ出力"@ja ;
    skos:altLabel "パスワードのログ出力"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/secret-log-exposure/> .

<https://comcomponent.com/knowledge/secret-log-exposure/> a skos:Concept ;
    skos:prefLabel "ログ経由の機密情報露出"@ja ;
    skos:definition "ログや例外メッセージ、dump/traceにそのまま出力された機密情報が、調査用ZIPや共有ファイルを通じて第三者に渡ってしまうこと。"@ja ;
    skos:altLabel "ログの機密漏えい"@ja .

<https://comcomponent.com/knowledge/dpapi/> a skos:Concept ;
    skos:prefLabel "DPAPI"@ja ;
    skos:definition "実行中のマシン上でアプリの秘密情報を保護するWindowsのデータ保護API。"@ja ;
    skos:altLabel "データ保護API"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/plaintext-secret-storage/> .

<https://comcomponent.com/knowledge/plaintext-secret-storage/> a skos:Concept ;
    skos:prefLabel "秘密情報の平文保存"@ja ;
    skos:definition "APIキーや接続文字列などの秘密情報を設定ファイルにそのまま平文で保存すること。ファイルを読まれた時点で秘密がそのまま漏えいする。"@ja ;
    skos:altLabel "平文設定"@ja ;
    skos:altLabel "平文パスワード保存"@ja .

<https://comcomponent.com/knowledge/windows-service/> a skos:Concept ;
    skos:prefLabel "Windowsサービス"@ja ;
    skos:definition "ユーザーのサインインと無関係にバックグラウンドで動くWindowsのプロセス。"@ja ;
    skos:altLabel "サービス"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/admin-rights/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/execution-level-asinvoker/> ;
    schema:description "アプリの実行権限は、マニフェストのrequestedExecutionLevelをasInvokerにすることで通常起動時に昇格しないよう構成できる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/secauthz/administrator-broker-model> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/admin-rights/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/execution-level-requireadministrator/> ;
    schema:description "requestedExecutionLevelをrequireAdministratorにすると、アプリ全体が常に管理者権限への昇格を要求する"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/security/application-security/application-control/user-account-control/how-it-works> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/execution-level-requireadministrator/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/desktop-app/> ;
    schema:description "通常のUIアプリ全体をrequireAdministratorで動かすことは推奨されず、asInvokerを基本にすべきとされる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/secauthz/administrator-broker-model> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/admin-privilege-separation/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/execution-level-requireadministrator/> ;
    schema:description "管理者権限が必要な処理は、アプリ全体を昇格させるのではなく別プロセスやserviceへ分離することが推奨される"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/secauthz/administrator-broker-model> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/execution-level-requireadministrator/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/dll-search-order-hijacking/> ;
    schema:description "アプリ全体が管理者権限で動くと、DLLすり替えなど本来なら影響の小さいバグや不備が、そのまま強い権限で実行され被害が拡大しうる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-security> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/unvalidated-dll-loading/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/dll-search-order-hijacking/> ;
    schema:description "LoadLibraryに絶対パスを指定せず名前だけで読み込むと、検索順序次第で意図しない場所のDLLを拾うことがある"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-security> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/code-signing-cert/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/unsigned-binary/> ;
    schema:description "EXE/DLL/MSI/MSIXにコード署名することで、配布物が未署名のまま出荷される状態を防げる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/msix/package/signing-package-overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/code-signing-timestamp/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/certificate-expiry/> ;
    schema:description "署名にタイムスタンプを付けておくと、証明書の有効期限が切れた後の検証でも署名時点の有効性を保てる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/seccrypto/time-stamping-authenticode-signatures> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/update-integrity-verification/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/unverified-update-application/> ;
    schema:description "ダウンロードした更新物の署名やハッシュを検証することで、改ざんされた更新物をそのまま適用してしまう事態を防ぐ"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows-hardware/drivers/install/authenticode> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/code-signing-cert/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/update-integrity-verification/> ;
    schema:description "更新まわりの検証を署名で行う場合は、更新モジュール自身にもコード署名証明書を用意することが本記事の推奨である(ハッシュ検証のみで済ませる設計も本記事では許容している)"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/msix/package/signing-package-overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/certificate-pinning/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/certificate-validation-bypass/> ;
    schema:description "証明書検証を丸ごとスキップするのではなく、対象ホストと証明書を限定したピン留めに寄せることが推奨される"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca5359> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/certificate-pinning/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/certificate-revocation-check/> ;
    schema:description "ピン留めした証明書であっても、期限切れや失効は別途CheckCertificateRevocationListなどで確認する必要があり、確認せずに認めるのは危険とされる。ただし社内CAがCRL/OCSPを公開しておらず失効確認の手段を用意できない場合は、証明書の有効期間を短くするかピン留め値を配り直せる経路を用意することで代替してよいとされる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca5399> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/certificate-validation-bypass/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/desktop-app/> ;
    schema:description "証明書検証を無効化することは、出荷するデスクトップアプリの通信で推奨されない"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca5359> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/sql-string-concatenation/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/sql-injection/> ;
    schema:description "文字列連結でSQLを組み立てると、利用者からの入力がSQL文の構造を書き換えてしまうことがある"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/sql/connect/ado-net/configure-parameters?view=sql-server-ver17> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/prepared-statement/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/sql-injection/> ;
    schema:description "SQL文の組み立てを全てプレースホルダで実装すれば、SQLインジェクションを防げる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/sql/connect/ado-net/configure-parameters?view=sql-server-ver17> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/secret-logging/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/secret-log-exposure/> ;
    schema:description "パスワード・トークン・接続文字列をそのままログへ出力すると、調査用ZIPや共有を通じて第三者に渡り、ログ自体が事故の主役になる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/core/extensions/data-redaction> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dpapi/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/plaintext-secret-storage/> ;
    schema:description "秘密情報を平文の設定ファイルへ置く代わりに、DPAPI/ProtectedDataで保護することが本記事の推奨である"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/dpapi/nf-dpapi-cryptprotectdata> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/app-secrets/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/dpapi/> ;
    schema:description "ローカル保存が必要なアプリの秘密情報は、DPAPIのような保護を前提にすべきとされる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/dpapi/nf-dpapi-cryptprotectdata> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/admin-privilege-separation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/windows-service/> ;
    schema:description "分離先としてWindowsサービスを選ぶ場合、管理者権限が必要な処理をそこで分離して実行する設計が使われる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/secauthz/administrator-broker-model> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/code-signing-cert/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/code-signing-timestamp/> ;
    schema:description "署名だけでなくタイムスタンプも付けることを、release手順に含めるべき最低限としている"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/seccrypto/time-stamping-authenticode-signatures> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/prepared-statement/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/desktop-app/> ;
    schema:description "外部入力を全部信用しない入力として扱うという最低限の方針の一つとして、SQLは必ずプレースホルダで実装すべきとされる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/sql/connect/ado-net/configure-parameters?view=sql-server-ver17> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
