カプセル化とは、強い境界線を引くことです。Web ブラウザの場合は、自分のモバイル コードが他のモバイル コードに悪用されないようにすることを意味します。サーバー上では、検証されたデータと検証されていないデータ、あるユーザーのデータと別のユーザーのデータ、またはユーザーが見ることを許可されたデータと許可されていないデータの区別などを意味する場合があります。
usrname
パラメーターを HTTP セッション オブジェクトに格納しています。
usrname = request.Item("usrname");
if (session.Item(ATTR_USR) == null) {
session.Add(ATTR_USR, usrname);
}
usrname
パラメーターを HTTP セッション オブジェクトに格納しています。
usrname = request.getParameter("usrname");
if (session.getAttribute(ATTR_USR) != null) {
session.setAttribute(ATTR_USR, usrname);
}
var GetURL = function() {};
GetURL.prototype = {
run: function(arguments) {
...
arguments.completionFunction({ "URL": document.location.href });
}
...
};
var ExtensionPreprocessingJS = new GetURL;
usrname
パラメーターを HTTP セッション オブジェクトに格納しています。
val usrname: String = request.getParameter("usrname")
if (session.getAttribute(ATTR_USR) != null) {
session.setAttribute(ATTR_USR, usrname)
}
webview
に信頼できないアイテムを渡します。
#import <MobileCoreServices/MobileCoreServices.h>
- (IBAction)done {
...
[self.extensionContext completeRequestReturningItems:@[untrustedItem] completionHandler:nil];
}
usrname
cookie を受け取り、そのユーザーが認証済みであることを確認する前に HTTP DB セッションに受け取った値を格納しています。
...
IF (OWA_COOKIE.get('usrname').num_vals != 0) THEN
usrname := OWA_COOKIE.get('usrname').vals(1);
END IF;
IF (v('ATTR_USR') IS null) THEN
HTMLDB_UTIL.set_session_state('ATTR_USR', usrname);
END IF;
...
username
パラメーターを HTTP セッション オブジェクトに格納しています。
uname = request.GET['username']
request.session['username'] = uname
webview
に信頼できないアイテムを渡します。
import MobileCoreServices
@IBAction func done() {
...
self.extensionContext!.completeRequestReturningItems([unstrustedItem], completionHandler: nil)
}
usrname
パラメーターを HTTP セッション オブジェクトに格納しています。
...
Dim Response As Response
Dim Request As Request
Dim Session As Session
Dim Application As Application
Dim Server As Server
Dim usrname as Variant
Set Response = objContext("Response")
Set Request = objContext("Request")
Set Session = objContext("Session")
Set Application = objContext("Application")
usrname = Request.Form("usrname")
If IsNull(Session("ATTR_USR")) Then
Session("ATTR_USR") = usrname
End If
...
public
アクセスメソッドから private
配列変数を返しているため、モバイルコードに関するセキュアコーディングの原則に違反しています。 private
配列変数を public
アクセスメソッドから出力すると、コードのコールは配列のコンテンツを変更でき、実質的に配列に public
アクセスを許可し、private
としたプログラマの意図に反します。 public
から private
配列変数を返しています。
public final class urlTool extends Applet {
private URL[] urls;
public URL[] getURLs() {
return urls;
}
...
}
public class CustomerServiceApplet extends JApplet
{
public void paint(Graphics g)
{
...
conn = DriverManager.getConnection ("jdbc:mysql://db.example.com/customerDB", "csr", "p4ssw0rd");
...
package
レベルで元の外部クラスにアクセスできるピアクラスに変換する必要があります。知らない間に、Inner Class は括弧付きクラスで private
フィールドにアクセスできるため、Inner Class がバイトコードのピアクラスになると、コンパイラは Inner Class がアクセスできる private
フィールドを protected
フィールドに変換します。
public final class urlTool extends Applet {
private final class urlHelper {
...
}
...
}
finalize()
メソッドを public
と宣言しているため、モバイルコードに関するセキュアコーディングの原則に違反しています。finalize()
の実装内で super.finalize()
のコール以外に finalize を明示的にコールしません。finalize メソッドが public
アクセスで宣言されているため、モバイルコードの状況では、攻撃者が悪意のある方法でいずれかの finalize()
メソッドを呼び出す場合、エラーを発生させやすい手動のガーベジコレクションはセキュリティ上の脅威となります。finalize()
を本来の目的どおりに使用しているのであれば、protected
アクセス以外で finalize()
を宣言する理由はありません。public finalize()
を宣言しています。
public final class urlTool extends Applet {
public void finalize() {
...
}
...
}
public
、final
、および static
を宣言しているため、モバイルコードに関するセキュアコーディングの原則に違反しています。public
、final
、および static
を宣言する配列はバグです。配列は可変オブジェクトであるため、final
制約は配列オブジェクトが一度だけ割り当てられることを必要としますが、配列要素の値は保証しません。配列が公開されているので、悪意のあるプログラムは配列に保存された値を変更することができます。ほとんどの場合、配列は private
で作成されます。 public
、final
および static
を宣言しています。
public final class urlTool extends Applet {
public final static URL[] urls;
...
}
final
ではなく public
を宣言しているため、モバイルコードに関するセキュアコーディングの原則に違反しています。 public
メンバー変数は、攻撃者によるアプレットの操作または内部状態への不正アクセスを防止するために final
を宣言します。final
ではなく public
を宣言しています。
public final class urlTool extends Applet {
public URL url;
...
}