Segurança de software não é o mesmo que software de segurança. Aqui, estamos interessados em tópicos como autenticação, controle de acesso, confidencialidade, criptografia e gestão de privilégios.
Exemplo 2: A diretiva de página do servidor a seguir desativa a validação de eventos.
...
<system.web>
...
<pages enableEventValidation="false">
...
</pages>
</system.web>
<%@ Page ... EnableEventValidation="false" %>
EnableHeaderChecking
no objeto HttpRuntimeSection
como false
.
Configuration config = WebConfigurationManager.OpenWebConfiguration("/MyApp");
HttpRuntimeSection hrs = (HttpRuntimeSection) config.GetSection("system.web/httpRuntime");
hrs.EnableHeaderChecking = false;
W3Clogger.loggingFields
pode ser configurado para permitir o registro de dados confidenciais, como dados privados e do sistema Informação.
builder.Services.AddW3CLogging(logging =>
logging.LoggingFields = W3CLoggingFields.All;
... )
Example 1
mostra como o W3Clogging pode ser configurado, usando o sinalizador All
, para registrar todos os campos possíveis na Solicitação Http, incluindo dados confidenciais, como ClientIpAddress
, ServerName
, ServerIpAddress
, ServerPort
, UserName
e Cookie
.FormsAuthentication.RedirectFromLoginPage()
emite um tíquete de autenticação, que permite que os usuários permaneçam autenticados por um período de tempo especificado. Quando o método é invocado com o segundo argumento false
, ele emite um tíquete de autenticação temporário que permanece válido por um período de tempo configurado em web.config
. Quando invocado com o segundo argumento true
, o método emite um tíquete de autenticação persistente. No .NET 2.0, o tempo de vida do tíquete persistente respeita o valor em web.config
, mas, no .NET 1.1, esse tíquete de autenticação persistente tem um tempo de vida padrão ridiculamente longo -- cinquenta anos.useUnsafeHeaderParsing
como true
. Essa configuração permite ataques contra aplicativos vulneráveis devido a regras de validação insuficientes em cabeçalhos HTTP. true
: useUnsafeHeaderParsing
está definido como "true".
...
<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:)
fará com que o sistema ignore os métodos NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
e NSURLConnectionDelegate.connection(_:didReceive:)
.NSURLConnectionDelegate.connection(_:willSendRequestFor:)
permite que o representante tome imediatamente uma decisão bem-informada sobre a autenticação de conexão. Se o representante implementar esse método, não será necessário implementar NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
ou NSURLConnectionDelegate.connection(_:didReceive:)
. Na verdade, esses métodos não são chamados e, portanto, qualquer verificação de segurança neles será ignorada.NSURLConnectionDelegate.connection(_:willSendRequestFor:)
fará com que o sistema ignore os métodos NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
e NSURLConnectionDelegate.connection(_:didReceive:)
.NSURLConnectionDelegate.connection(_:willSendRequestFor:)
permite que o representante tome imediatamente uma decisão bem-informada sobre a autenticação de conexão. Se o representante implementar esse método, não será necessário implementar NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
ou NSURLConnectionDelegate.connection(_:didReceive:)
. Na verdade, esses métodos não são chamados e, portanto, qualquer verificação de segurança neles será ignorada.NSURLConnection
, de um objeto NSURLSession
ou de um objeto NSURLDownload
avaliar a cadeia de confiança. NSURLCredential
usando uma confiança de servidor não avaliada:
-(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
, de um objeto NSURLSession
ou de um objeto NSURLDownload
avaliar a cadeia de confiança. NSURLCredential
usando uma confiança de servidor não avaliada:
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
, de um objeto NSURLSession
ou de um objeto NSURLDownload
avaliar a relação de confiança do servidor. A fim de avaliar a relação de confiança do servidor, o método SecTrustEvaluate(_:_:)
deve ser chamado com a confiança obtida do método serverTrust
do objeto NSURLProtectionSpace
do servidor. SecTrustEvaluate(_:_:)
retorna dois valores diferentes:OSStatus
retornado representa o código de resultado.cancel(_:)
.
SecTrustRef trust = [[challenge protectionSpace] serverTrust];
SecTrustResultType result = kSecTrustResultInvalid;
OSStatus status = SecTrustEvaluate(trust, &result);
completionHandler(NSURLSessionAuthChallengeUseCredential, [challenge proposedCredential]);
NSURLConnection
, de um objeto NSURLSession
ou de um objeto NSURLDownload
avaliar a relação de confiança do servidor. A fim de avaliar a relação de confiança do servidor, o método SecTrustEvaluate(_:_:)
deve ser chamado com a confiança obtida do método serverTrust
do objeto NSURLProtectionSpace
do servidor. SecTrustEvaluate(_:_:)
retorna dois valores diferentes:OSStatus
retornado representa o 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
lida com desafios de autenticação sem primeiro verificar se o aplicativo sabe como lidar com o desafio de autenticação para um espaço de proteção especial.NSURLProtectionSpace
representa um servidor ou uma área em um servidor, comumente chamada de realm, que requer autenticação.NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
será chamado logo antes da chamada para o método NSURLConnectionDelegate.connection(_:didReceive:)
que deve realizar a autenticação. Isso permite que NSURLConnectionDelegate
inspecione o espaço de proteção antes de tentar se autenticar nele. Ao retornar true
, o representante indica que pode lidar com a forma de autenticação, o que acontece na chamada subsequente para connection(_:didReceive:)
. Se o seu representante não implementar esse método, e o espaço de proteção usar a autenticação de certificado de cliente ou a autenticação por confiança de servidor, o sistema tentará usar a cadeia de chaves do usuário para a autenticação, o que pode não ser o comportamento desejado.NSURLConnection
lida com desafios de autenticação sem primeiro verificar se o aplicativo sabe como lidar com o desafio de autenticação para um espaço de proteção especial.NSURLProtectionSpace
representa um servidor ou uma área em um servidor, comumente chamada de realm, que requer autenticação.NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
será chamado logo antes da chamada para o método NSURLConnectionDelegate.connection(_:didReceive:)
que deve realizar a autenticação. Isso permite que NSURLConnectionDelegate
inspecione o espaço de proteção antes de tentar se autenticar nele. Ao retornar true
, o representante indica que pode lidar com a forma de autenticação, o que acontece na chamada subsequente para connection(_:didReceive:)
. Se o seu representante não implementar esse método, e o espaço de proteção usar a autenticação de certificado de cliente ou a autenticação por confiança de servidor, o sistema tentará usar a cadeia de chaves do usuário para a autenticação, o que pode não ser o comportamento desejado.NSURLConnection
ou NSURLSession
não consegue verificar o destino para onde o host está enviando as credenciais.NSURLConnection
ou NSURLSession
para manipular solicitações de autenticação. Se não forem realizadas ações para garantir que a solicitação de autenticação seja proveniente do host esperado, será possível que credenciais sejam enviadas para cada URL carregada pelo aplicativo. Além disso, se não for feita uma verificação para garantir que as credenciais possam ser enviadas de forma segura, será possível que elas sejam roubadas.
- (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
ou NSURLSession
não consegue verificar o destino para onde o host está enviando as credenciais.NSURLConnection
ou NSURLSession
para manipular solicitações de autenticação. Se não forem realizadas ações para garantir que a solicitação de autenticação seja proveniente do host esperado, será possível que credenciais sejam enviadas para cada URL carregada pelo aplicativo. Além disso, se não for feita uma verificação para garantir que as credenciais possam ser enviadas de forma segura, será possível que elas sejam roubadas.
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
) a porta TCP 22
, onde um servidor SSH normalmente responde às solicitações de conexão de entrada.
- 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
como 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á definido como 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á definido como no
.
- name: EFS provisioning
community.aws.efs:
state: present
name: myTestEFS
encrypt: no
targets:
- subnet_id: subnet-12345678
security_groups: [ "sg-87654321" ]