La seguridad de un software no es un software de seguridad. Nos preocupamos de cuestiones como la autenticación, el control de acceso, la confidencialidad, la criptografía y la gestión de privilegios.
[Authorize]
con el uso de un atributo [AllowAnonymous]
de clase o método.[Authorize]
a una clase o un método. Además, el requisito de autorización especificado de una clase o método de aplicación se puede omitir agregando el atributo [AllowAnonymous]
. Cuando se especifican ambos, el atributo [AllowAnonymous]
tiene prioridad y omite el atributo [Authorize]
. Esto puede resultar en el acceso arbitrario y anónimo a datos y acciones confidenciales por parte de un atacante.[AllowAnonymous]
de clase anulando un conjunto de atributos [Authorize]
en el método. El método secretAction()
no requiere autorización a pesar de tener el atributo [Authorize]
.Ejemplo 2: El siguiente ejemplo muestra el atributo
...
[AllowAnonymous]
public class Authorization_Test
{
[Authorize]
public IActionResult secretAction()
{
}
}
...
[AllowAnonymous]
de clase de una superclase anulando un atributo [Authorize]
establecido en el método de una subclase. Debido a que la clase heredada Inherit_AA
tiene el atributo [AllowAnonymous]
, el método secretAction()
no requiere autorización a pesar de especificar el atributo [Authorize]
.Ejemplo 3: A continuación, se muestra el atributo
...
[AllowAnonymous]
public abstract class Inherit_AA
{
}
public class Authorization_Test:Inherit_AA
{
[Authorize]
public IActionResult secretAction()
{
}
}
...
[AllowAnonymous]
que anula un atributo [Authorize]
de método con herencia. Debido a que el método heredado secretAction()
tiene el atributo [AllowAnonymous]
, el método secretAction()
no requiere autorización, a pesar de especificar el atributo [Authorize]
en el método de anulación.
...
public abstract class Inherit_AA
{
[AllowAnonymous]
public abstract IActionResult secretAction()
{
}
}
public class Authorization_Test:Inherit_AA
{
[Authorize]
public override IActionResult secretAction()
{
}
}
...
<apex:page controller="accessControl">
<apex:pageBlock >
<apex:pageBlockSection >
<apex:outputText value="Survey Name: "/>
<apex:inputText value="{!surveyName}"/>
</apex:pageBlockSection>
<apex:pageBlockSection >
<apex:outputText value="New Name: "/>
<apex:inputText value="{!newSurveyName}"/>
</apex:pageBlockSection>
<apex:pageBlockSection >
<apex:commandButton value="Update" action="{!updateName}"/>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:page>
public String surveyName { get; set; }
public String newSurveyName { get; set; }
public PageReference updateName() {
Survey__c s = [SELECT Name FROM Survey__c WHERE Name=:surveyName];
s.Name = newSurveyName;
update s;
PageReference page = ApexPages.currentPage();
page.setRedirect(true);
return page;
}
String canned_acl = request.getParameter("acl");
CreateBucketRequest createBucketRequest = CreateBucketRequest.builder()
.bucket("foo")
.acl(canned_acl)
.createBucketConfiguration(CreateBucketConfiguration.builder().locationConstraint(region.id()).build())
.build();
acl
en un grupo limitado, un usuario malintencionado puede definirlo como public-read-write
y conceder acceso anónimo completo al contenedor.
...
String selectedInvoice = request.getParameter("invoiceDate");
...
AmazonSimpleDBClient sdbc = new AmazonSimpleDBClient(appAWSCredentials);
GetAttributesResult sdbResult = sdbc.getAttributes(new GetAttributesRequest("invoices", selectedInvoice));
...
Example 1
genera una lista de facturas que pertenecen al usuario actual, un atacante podría omitir este comportamiento para solicitar la factura que desee. Dado que el código de este ejemplo no comprueba si el usuario tiene permiso para acceder a la factura solicitada, se mostrará cualquier factura, incluso si no pertenece al usuario actual.
...
id = this.getIntent().getExtras().getInt("id");
cursor = db.query(Uri.parse(invoices), columns, "id = ? ", {id}, null, null, null);
...
id
. Aunque la consulta genera una lista de identificadores de factura que pertenecen al usuario actual, un atacante puede omitir este comportamiento para solicitar cualquier factura que desee. Como el código de este ejemplo no garantiza que el usuario tenga permiso para acceder a la factura solicitada, se mostrará cualquier factura, aunque no pertenezca al usuario actual.DirectoryEntry de
mediante un enlace anónimo.
...
de = new DirectoryEntry("LDAP://ad.example.com:389/ou=People,dc=example,dc=com");
...
de
se realizarán sin autenticación ni control de acceso. Un atacante puede ser capaz de manipular una de estas consultas de forma inesperada para obtener acceso a registros que, de otro modo, estarían protegidos por el mecanismo de control de acceso del directorio.ldap_simple_bind_s()
para vincularse de forma anónima a un directorio LDAP.
...
rc = ldap_simple_bind_s( ld, NULL, NULL );
if ( rc != LDAP_SUCCESS ) {
...
}
...
ld
se realizarán sin autenticación ni control de acceso. Un atacante puede ser capaz de manipular una de estas consultas de forma inesperada para obtener acceso a registros que, de otro modo, estarían protegidos por el mecanismo de control de acceso del directorio.DirContext ctx
mediante un enlace anónimo.
...
env.put(Context.SECURITY_AUTHENTICATION, "none");
DirContext ctx = new InitialDirContext(env);
...
ctx
se realizarán sin autenticación ni control de acceso. Un atacante puede ser capaz de manipular una de estas consultas de forma inesperada para obtener acceso a registros que, de otro modo, estarían protegidos por el mecanismo de control de acceso del directorio.
...
$ldapbind = ldap_bind ($ldap, $dn, $password = "" );
...
...
PARAMETERS: p_xfeld TYPE xfeld.
...
CALL FUNCTION 'BAPI_EMPLOYEE_GETDATA'
EXPORTING
employee_id = emp_id
authority_check = p_xfeld
IMPORTING
return = ret
TABLES
org_assignment = org_data
personal_data = pers_data
internal_control = con_data
communication = comm_data
archivelink = arlink.
...
p_xfeld
, no se llevan a cabo las comprobaciones de autorización antes de devolver la información personal y de contacto de un empleado.