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.
Ejemplo 2: La siguiente directiva de página de servidor deshabilita la validación de eventos.
...
<system.web>
...
<pages enableEventValidation="false">
...
</pages>
</system.web>
<%@ Page ... EnableEventValidation="false" %>
EnableHeaderChecking
en el objeto HttpRuntimeSection
como false
.
Configuration config = WebConfigurationManager.OpenWebConfiguration("/MyApp");
HttpRuntimeSection hrs = (HttpRuntimeSection) config.GetSection("system.web/httpRuntime");
hrs.EnableHeaderChecking = false;
W3Clogger.loggingFields
se puede configurar para permitir el registro de datos confidenciales, como datos privados e información del sistema.
builder.Services.AddW3CLogging(logging =>
logging.LoggingFields = W3CLoggingFields.All;
... )
Example 1
muestra cómo se puede configurar W3Clogging, usando All
, para registrar todos los campos posibles en la solicitud Http, incluyendo información confidencial como ClientIpAddress
, ServerName
, ServerIpAddress
, ServerPort
, UserName
y Cookie
.FormsAuthentication.RedirectFromLoginPage()
emite un vale de autenticación, lo que permite a los usuarios permanecer autenticados durante un periodo especificado. Si se llama al método con el segundo argumento false
, este emite un vale de autenticación temporal que será válido durante el periodo de tiempo configurado en web.config
. Al llamar al segundo argumento true
, el método emite un vale de autenticación persistente. En .NET 2.0, la duración del vale persistente se ajusta al valor especificado en web.config
, pero en .NET 1.1, el vale de autenticación persistente presenta una duración predeterminada ridículamente larga: cincuenta años. useUnsafeHeaderParsing
en true
. Esta configuración permite ataques contra aplicaciones vulnerables debido a reglas de validación insuficientes en los encabezados HTTP. true
: useUnsafeHeaderParsing
está definido como verdadero.
...
<configuration>
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
</configuration>
...
Page.EnableViewStateMac = false;
public ActionResult ActionName(Model model, string returnurl)
{
// ... controller logic
}
Example 2::The following Razor code creates a form in the resulting HTML without the built-in defense against cross-site request forgery. Note that parameter
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
// ... form elements
}
antiforgery
is set to either false
or null
:
@using (Html.BeginForm("actionName", "controllerName", routeValues, FormMethod.Post, antiforgery: false, htmlAtts)) {
// ... form elements
}
NSURLConnectionDelegate.connection(_:willSendRequestFor:)
hará que el sistema ignore los métodos NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
y NSURLConnectionDelegate.connection(_:didReceive:)
.NSURLConnectionDelegate.connection(_:willSendRequestFor:)
permite que el delegado tome inmediatamente una decisión informada acerca de la autenticación de la conexión. Si el delegado implementa este método, no será necesario implementar NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
o NSURLConnectionDelegate.connection(_:didReceive:)
. De hecho, estos métodos no se invocan, por lo que las comprobaciones de seguridad se ignorarán.NSURLConnectionDelegate.connection(_:willSendRequestFor:)
hará que el sistema ignore los métodos NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
y NSURLConnectionDelegate.connection(_:didReceive:)
.NSURLConnectionDelegate.connection(_:willSendRequestFor:)
permite que el delegado tome inmediatamente una decisión informada acerca de la autenticación de la conexión. Si el delegado implementa este método, no será necesario implementar NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
o NSURLConnectionDelegate.connection(_:didReceive:)
. De hecho, estos métodos no se invocan, por lo que las comprobaciones de seguridad se ignorarán.NSURLConnection
, un objeto NSURLSession
o un objeto NSURLDownload
evaluar la cadena de confianza. NSURLCredential
mediante una credencial de confianza del servidor no evaluada:
-(void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * credential)) completionHandler {
...
[challenge.sender useCredential:[NSURLCredential credentialForTrust: challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
...
}
NSURLConnection
, un objeto NSURLSession
o un objeto NSURLDownload
evaluar la cadena de confianza. NSURLCredential
mediante una credencial de confianza del servidor no evaluada:
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
...
let cred = URLCredential(user: "foo", password: "bar", persistence: .none)
let trust = challenge.protectionSpace.serverTrust
let cred = URLCredential(trust:trust!)
...
}
NSURLConnection
, objeto NSURLSession
o un objeto NSURLDownload
evaluar la confianza del servidor. Para poder evaluar la confianza del servidor, debe llamarse al método SecTrustEvaluate(_:_:)
con la confianza obtenida del método serverTrust
del objeto del servidor NSURLProtectionSpace
. SecTrustEvaluate(_:_:)
devuelve dos valores diferentes:OSStatus
devuelto representa el código de resultado.cancel(_:)
.
SecTrustRef trust = [[challenge protectionSpace] serverTrust];
SecTrustResultType result = kSecTrustResultInvalid;
OSStatus status = SecTrustEvaluate(trust, &result);
completionHandler(NSURLSessionAuthChallengeUseCredential, [challenge proposedCredential]);
NSURLConnection
, objeto NSURLSession
o un objeto NSURLDownload
evaluar la confianza del servidor. Para poder evaluar la confianza del servidor, debe llamarse al método SecTrustEvaluate(_:_:)
con la confianza obtenida del método serverTrust
del objeto del servidor NSURLProtectionSpace
. SecTrustEvaluate(_:_:)
devuelve dos valores diferentes:OSStatus
devuelto representa el código de resultado.cancel(_:)
.
let trust = challenge.protectionSpace.serverTrust
var result = SecTrustResultType.invalid
let status = SecTrustEvaluate(trust!,&secresult)
completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, challenge.proposedCredential)
NSURLConnection
trata los desafíos de autenticación sin antes verificar que la aplicación sabe cómo manejar el desafío de autenticación para un espacio de protección en concreto.NSURLProtectionSpace
representa un servidor o un área de un servidor, denominado comúnmente dominio, que requiere autenticación.NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
se llamará justo antes de llamar al método NSURLConnectionDelegate.connection(_:didReceive:)
que debe realizar la autenticación. Esto permite que NSURLConnectionDelegate
inspeccione el espacio de información antes de intentar la autenticación. Al devolver true
, el delegado indica que puede manejar el formulario de autenticación, lo que hace en la llamada subsiguiente a connection(_:didReceive:)
. Si su delegado no implementa este método y el espacio de protección utiliza la autenticación del certificado de cliente o la autenticación de confianza del servidor, el sistema intentará utilizar las llaves del usuario para realizar la autenticación, lo cual puede no ser el comportamiento deseado.NSURLConnection
trata los desafíos de autenticación sin antes verificar que la aplicación sabe cómo manejar el desafío de autenticación para un espacio de protección en concreto.NSURLProtectionSpace
representa un servidor o un área de un servidor, denominado comúnmente dominio, que requiere autenticación.NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
se llamará justo antes de llamar al método NSURLConnectionDelegate.connection(_:didReceive:)
que debe realizar la autenticación. Esto permite que NSURLConnectionDelegate
inspeccione el espacio de información antes de intentar la autenticación. Al devolver true
, el delegado indica que puede manejar el formulario de autenticación, lo que hace en la llamada subsiguiente a connection(_:didReceive:)
. Si su delegado no implementa este método y el espacio de protección utiliza la autenticación del certificado de cliente o la autenticación de confianza del servidor, el sistema intentará utilizar las llaves del usuario para realizar la autenticación, lo cual puede no ser el comportamiento deseado.NSURLConnection
o NSURLSession
falla al comprobar cuál es el host al que se envían las credenciales.NSURLConnection
o NSURLSession
para tratar solicitudes de autenticación. Si olvida comprobar que la solicitud de autenticación proviene del host esperado, las credenciales se enviarán a todas las URL que cargue la aplicación. Además, si no verifica que las credenciales se pueden enviar de forma segura, las credenciales serán susceptibles de ser robadas.
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NS URLAuthenticationChallenge *)challenge completionHandler:(void (^)(NS URLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler {
NSString *user = [self getUser];
NSString *pass = [self getPassword];
NSURLCredential *cred = [NSURLCredential credentialWithUser:user
password:pass persistence:NSURLCredentialPersistenceForSession];
completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
}
NSURLConnection
o NSURLSession
falla al comprobar cuál es el host al que se envían las credenciales.NSURLConnection
o NSURLSession
para tratar solicitudes de autenticación. Si olvida comprobar que la solicitud de autenticación proviene del host esperado, las credenciales se enviarán a todas las URL que cargue la aplicación. Además, si no verifica que las credenciales se pueden enviar de forma segura, las credenciales serán susceptibles de ser robadas.
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
let user = getUser()
let pass = getPassword()
let credential = URLCredential(user: user, password: pass, persistence: .none)
completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, credential)
}
0.0.0.0/0
) el puerto TCP22
, donde un servidor SSH suele responder a las solicitudes de conexión entrantes.
- name: Task to open SSH port
amazon.aws.ec2_group:
name: demo_security_group
description: Open the ssh port to the world
state: present
vpc_id: 123456
region: us-west-1
rules:
- proto: tcp
ports: 22
cidr_ip: 0.0.0.0/0
- name: Create Lambda policy statement for S3 event notification
community.aws.lambda_policy:
action: lambda:InvokeFunction
function_name: functionName
principal: *
statement_id: lambda-s3-demobucket-access-log
source_arn: arn:aws:s3:us-west-2:123456789012:demobucket
source_account: 123456789012
state: present
publicly_accessible
en yes
.
- name: example1
community.aws.redshift:
identifier: mycluster
command: create
db_name: mydb
node_type: ds1.xlarge
username: "{{ username }}"
password: "{{ password }}"
publicly_accessible: yes
encrypted
está establecido en false
.
- name: Basic AMI Creation
amazon.aws.ec2_ami:
state: present
instance_id: i-xxxxxx
name: test_ami
device_mapping:
device_name: /dev/sda
encrypted: false
encrypt
está establecido en no
.
- name: EFS provisioning
community.aws.efs:
state: present
name: myTestEFS
encrypt: no
targets:
- subnet_id: subnet-12345678
security_groups: [ "sg-87654321" ]