軟體安全性並非安全性軟體。我們關注驗證、Access Control、保密性、加密以及權限管理之類的主題。
AUTHID
子句的封包則預設為 AUTHID DEFINER
。AUTHID DEFINER
或 AUTHID CURRENT_USER
。在具有定義封包的使用者權限時,執行封包中擁有定義碼權限的函數與程序。這樣就可允許更新和存取資料的特定部份,而不需要授予整個表格或結構的存取權限。封包中有了啟動程式的權限或 AUTHID CURRENT_USER
,擁有權限的使用者即可呼叫函數與程序。這樣就不允許使用者存取使用者沒有存取權限的資料。如果未提供 AUTHID
子句,封包就會預設為定義碼的權限。 SYS
或另一個擁有更高權限的使用者所定義,因此可能導致程式碼攻擊更加危險。<uses-permission/>
標籤,將權限列在 AndroidManifest.xml
檔案中。如果沒有要求所需的權限,則需要這些權限的作業會在執行階段失敗。在某些情況下,java.lang.SecurityException
會拋回應用程式。其他情況下,作業會在沒有異常時失敗。sms.sendTextMessage(recipient, null, message, PendingIntent.getBroadcast(SmsMessaging.this, 0, new Intent(ACTION_SMS_SENT), 0), null);
android.permission.SEND_SMS
權限。如果此權限未透過應用程式在資訊清單檔案中要求,則應用程式將無法傳送 SMS。<uses-permission/>
標籤,將權限列在 AndroidManifest.xml
檔案中。如果沒有要求所需的權限,則需要這些權限的作業會在執行階段失敗。在某些情況下,java.lang.SecurityException
會拋回應用程式。其他情況下,作業會在沒有異常時失敗。Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
android.permission.READ_CONTACTS
權限。如果應用程式未在資訊清單檔案中要求此權限,應用程式便會無法讀取聯絡人資訊。<uses-permission/>
標籤,將權限列在 AndroidManifest.xml
檔案中。如果沒有要求所需的權限,則需要這些權限的作業會在執行階段失敗。在某些情況下,java.lang.SecurityException
會拋回應用程式。其他情況下,作業會在沒有異常時失敗。android.provider.Telephony.SMS_RECEIVED
動作傳送用意。
Intent i = new Intent("android.provider.Telephony.SMS_RECEIVED");
context.sendBroadcast(i);
android.permission.BROADCAST_SMS
權限。如果應用程式未在資訊清單檔案中要求此權限,應用程式便會無法傳送用意。public
方法中需要權限的程式碼。public
存取指定名稱的方法表示任何外部程式碼都可以呼叫該方法。程式碼在程式庫或在程式碼可動態進入系統 (例如:Code Injection、Dangerous File Inclusion、File Upload 等) 的環境中共享時,執行需要權限動作的公用方法會有其危險性。doPrivilegedOpenFile()
為 public
,且會執行需要權限許可的作業。
public static void doPrivilegedOpenFile(final String filePath) {
final BadFileNamePrivilegedAction pa = new BadFileNamePrivilegedAction(filePath);
FileInputStream fis = null;
...
fis = (FileInputStream)AccessController.doPrivileged(pa);
...
}
ALL PRIVILEGES
或 ALL
選項將授予使用者所有可套用到物件的權限。程式設計師可能無法發覺授予的所有權限。
GRANT ALL ON employees TO john_doe;
john_doe
現在還有變更表格定義的權限。true
的收回來達成,以便指定已提供權限:
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions$Callback callback){
super.onGeolocationPermissionsShowPrompt(origin, callback);
callback.invoke(origin, true, false);
}
ACTUATOR
角色的使用者才能存取。
management.security.enabled=false
endpoints.health.sensitive=false
@Component
public class CustomEndpoint implements Endpoint<List<String>> {
public String getId() {
return "customEndpoint";
}
public boolean isEnabled() {
return true;
}
public boolean isSensitive() {
return false;
}
public List<String> invoke() {
// Custom logic to build the output
...
}
}
spring.application.admin.enabled
屬性,針對應用程式啟用與管理相關的功能。這會在 MBeanServer
平台上暴露 SpringApplicationAdminMXBean
。開發人員可使用此功能對 Spring Boot 應用程式進行遠端管理,但是這個功能會以遠端 JMX 端點的形式暴露其他攻擊面。根據 MBeanServer
的組態,MBean
可以在本機或遠端暴露,且可能需要驗證。最糟糕的情況是,攻擊者能夠以遠端方式管理應用程式,包括無需任何驗證就可關閉應用程式。最理想的情況是,服務與用於保護伺服器的憑證的強度一樣。spring-boot-devtools
存在安全風險。請勿在生產部署中啟用支援。」
endpoints.shutdown.enabled=true
<http auto-config="true">
...
<intercept-url pattern="/app/admin" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="permitAll" />
</http>
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
<http auto-config="true">
...
<headers disabled="true"/>
...
</http>
Ant
路徑運算式來指定如何保護端點。/admin
" Ant
路徑運算式的任何端點都需要管理權限以便存取:
<http auto-config="true">
...
<intercept-url pattern="/app/admin" access="ROLE_ADMIN" />
...
<intercept-url pattern="/**" access="permitAll" />
</http>
Accept
標頭或使用副檔名指定所需的內容類型,來指定資源的提供方式。例如,您可以透過傳送要求到 /admin.json
來要求 JSON 文件格式的 /admin
資源。Ant
路徑運算式不包含內容交涉副檔名,因此該要求不符合 /admin
運算式,且端點未受保護。anyRequest()
。未能定義使用 anyRequest()
比對器的後援檢查,可能會使端點不受保護。
<http auto-config="true">
<intercept-url pattern="/app/admin" access="ROLE_ADMIN" />
<intercept-url pattern="/" access="permitAll" />
</http>
Example 1
中,目前或未來的端點 (例如 /admin/panel
) 可能會不受保護。HttpFirewall
包含在其 FilterChainProxy
中來實現此功能,其會在傳送要求之前透過篩選鏈處理要求。Sprint Security 預設會使用 StrictHttpFirewall
實作。%2F
和 ;
字元:
<beans:bean id="httpFirewall" class="org.springframework.security.web.firewall.StrictHttpFirewall" p:allowSemicolon="true" p:allowUrlEncodedSlash="true"/>
NoneAuth
驗證方法來確定可用的驗證方法。
client = SSHClient()
client.connect(host, port, auth_strategy=NoneAuth("user"))
remove
指令來刪除整個資料集。最近,有關於惡意攻擊網際網路上公開執行的不安全 MongoDB 實例之報告。攻擊者刪除了資料庫,並要求支付贖金才會加以還原。remove
指令來刪除整個資料集。 最近,有關於惡意攻擊網際網路上公開執行的不安全 MongoDB 實例之報告。 攻擊者刪除了資料庫,並要求支付贖金才會加以還原。