このセクションには、ソース コード以外のものでも、作成中の製品のセキュリティにとって重要なものがすべて含まれています。この分野が対象とする問題は、ソース コードに直接関係しないため、この分野の他の部分と分けました。
<get>
タスクを使用して Ant ターゲットの外部の依存関係を指定します。このタスクは、対応する URL で指定された依存関係を取得します。このアプローチは、開発者が各外部の依存関係をソフトウェア プロジェクトに含まれるアーティファクトとして文書化するシナリオと機能的には同等ですが、ビルドの実行時に依存関係の取得と組み込みが自動化されるため、より望ましい方法です。
<get src="http://people.apache.org/repo/m2-snapshot-repository/org/apache/openejb/openejb-jee/3.0.0-SNAPSHOT/openejb-jee-3.0.0-SNAPSHOT.jar"
dest="${maven.repo.local}/org/apache/openejb/openejb-jee/3.0.0-SNAPSHOT/openejb-jee-3.0.0-SNAPSHOT.jar"
usetimestamp="true" ignoreerrors="true"/>
<dependencies>
<dependency org="javax.servlet"
name="servletapi"
rev="2.3" conf="build->*"/>
<dependency org="javax.jms"
name="jms"
rev="1.1" conf="build->*"/> ...
</dependencies>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
<version>1.1</version>
</dependency>
...
</dependencies>
Configure::write('debug', 3);
Configure::write()
メソッドへの 2 番目のパラメーターは、デバッグレベルを示しています。数字が大きいほど、ログメッセージが詳細になります。low
セッションセキュリティで設定されている CakePHP を示しています。
Configure::write('Security.level', 'low');
Security.level
設定と Session.timeout
設定を一緒に使用すると、セッションが有効な期間を定義できます。実際のセッションタイムアウト時間は、次の倍数のいずれかを Session.timeout
と積算した値と等しくなります。ActionForms
を使用する Struts 1 アプリケーションは、ClassLoader 操作に対して脆弱です。
const dns = require('dns');
// User-controlled input for DNS servers
const customDnsServers = from_user_controlled_input;
// Set custom DNS servers
dns.setServers(customDnsServers);
customDnsServers
変数には、ユーザー制御入力から得られた値が割り当てられます。その後、この入力は dns.setServers(customDnsServers)
で DNS サーバーを設定する際に使用されます。攻撃者が悪意のある DNS サーバー アドレスを指定すると、アプリケーションに攻撃者のサーバーを使用してドメイン名を解決するように指示できるため、偽の IP アドレスが返される可能性があります。Dockerfile
が USER
を指定していない場合、デフォルトでは Docker コンテナーはスーパー ユーザー権限で実行されます。これらのスーパー ユーザー権限は、コンテナー内で実行されているコードに伝達されます。これは通常、必要以上の権限です。スーパー ユーザー権限で Docker コンテナーを実行すると、攻撃対象領域が広がり、攻撃者による深刻な形式の悪用が可能になるおそれがあります。latest
タグが、バージョンを提供するためにダイジェストまたは一意のタグを使用しないイメージのバージョン レベルを自動的に示します。Docker は自動的に、最新のイメージ マニフェスト ファイルを指すメカニズムとして latest
タグを割り当てます。タグは変更可能であるため、攻撃者は latest
(または imagename-lst, imagename-last, myimage
などの弱いタグ) を使用して、イメージやレイヤーを置き換えることができます。ubuntu
を使用してベース イメージを選択するように Docker に指示します。
FROM ubuntu:Latest
...
zypper
に指示します。
...
zypper install package
...
Example 2
では、リポジトリが侵害された場合、攻撃者は動的基準を満たすバージョンをアップロードするだけで、zypper
が悪意のあるバージョンの依存関係をダウンロードするように仕向けることができます。ADD/COPY
コマンドを使用して機密情報が追加された場合、攻撃者は各 docker レイヤーを再作成してその情報を取得できます。Volumes
を使用した場合も、機密ディレクトリが公開される可能性があります。Volumes
を使用してデータを永続化する必要がある場合は、機密性の高いディレクトリのマウントを避けてください。例 2: 次の ASPX コードを使用すると、すべての ASP.NET フレームワークスクリプトのリクエストを Microsoft Ajax CDN に自動的にリダイレクトできます。
...
<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js" type="text/javascript"></script>
...
...
<asp:ScriptManager
ID="ScriptManager1"
EnableCdn="true"
Runat="Server" />
...
Example 2
では、ScriptManager
コントロールが、ASPX ページを設定して、適切な CDN にスクリプトのリクエストを自動的にリダイレクトしています。services-config.xml
ディスクリプタファイルは "Logging" XML 要素を指定して、ログの各要素を記述します。次のようになります。
<logging>
<target class="flex.messaging.log.ConsoleTarget" level="Debug">
<properties>
<prefix>[BlazeDS]</prefix>
<includeDate>false</includeDate>
<includeTime>false</includeTime>
<includeLevel>false</includeLevel>
<includeCategory>false</includeCategory>
</properties>
<filters>
<pattern>Endpoint.*</pattern>
<pattern>Service.*</pattern>
<pattern>Configuration</pattern>
</filters>
</target>
</logging>
target
タグでは、ログレベルを示す level
と呼ばれる属性をオプションで使用できます。デバッグ レベルが詳細すぎるレベルに設定されている場合、アプリケーションが機密データをログ ファイルに書き込む可能性があります。allUsers
や allAuthenticatedUsers
などの特殊なプリンシパル タイプにアクセス権や BigQuery ロールを付与すると、だれでも機密データにアクセスできてしまいます。