封裝是要劃定清楚的界限。在網頁瀏覽器中,這可能意味著確保您的行動程式碼不會被其他行動程式碼濫用。在伺服器上,這可能意味著區分經過驗證的資料與未經驗證的資料、區分一個使用者的資料與另一個使用者的資料,或區分允許使用者查看的資料與不允許查看的資料。
usrname
參數。
usrname = request.Item("usrname");
if (session.Item(ATTR_USR) == null) {
session.Add(ATTR_USR, usrname);
}
usrname
參數。
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
參數。
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
參數。
uname = request.GET['username']
request.session['username'] = uname
webview
。
import MobileCoreServices
@IBAction func done() {
...
self.extensionContext!.completeRequestReturningItems([unstrustedItem], completionHandler: nil)
}
usrname
參數。
...
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
陣列變數,因此違反了行動程式碼的安全編碼原則。 public
存取方法中回傳 private
陣列變數,透過此方式,您可以呼叫程式碼修改該陣列的內容,這可以輕易地取得陣列 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
的存取權。public finalize()
方法。
public final class urlTool extends Applet {
public void finalize() {
...
}
...
}
public
、final
和 static
,因此違反了行動程式碼的安全編碼原則。public
、final
和 static
是一個錯誤 (bug)。由於陣列是一個可變的物件,因此 final
限制會要求陣列物件本身只能被分配一次,但是不能保證陣列的元件的值也是如此。由於陣列是公用的,因此惡意的程式可以變更儲存在陣列中的值。所以,在大多數情況下,應該將陣列設定為 private
。 public
、final
和 static
。
public final class urlTool extends Applet {
public final static URL[] urls;
...
}
public
,而不是 final
,因此違反了行動程式碼的安全編碼原則。 public
成員變數都應該聲明 final
,以避免攻擊者未經授權竄改或取得對 Applet 內部狀態的存取權。public
,而不是 final
。
public final class urlTool extends Applet {
public URL url;
...
}