Vamos analisar a função.
11 parametros de entrada em javascript
Uma vez que nesta linguagem as variaveis não são fortemente tipificadas, são onze possibilidades de entrar codigo pois
Area pode ser 01, ou "Select Sum(quantidade) from tregisto inner join ...) por ai fora.
Isto pode se repetir para cada variavel.
Mais a frente digo como.
Agora o maior problema no meu ponto de vista. A construção de um procedimento em runtime no lado do client com os dados das variaveis:
-> "; select @operacao=" + Operacao + , permite assignar a variavel @operacao do procedimento o que eu quiser:
. por exemplo tornar um debito num credito.
. igualar ao resultado de um outro procedimento que demore imenso tempo ou que não termine e empaque a bd.
. o que quiserem imaginar.
O mesmo para as outras variaveis.
Sem falar que fico com o conhecimento da estrutura de dados do sistema ( nome de tabelas, campos)
- > while (incDate <= sysDate) { se tornar este loop infinito posso inserir dados até rebentar a BD temos n inserts a ser criados em runtime -> "insert into tregisto (centro, estrutura, area, produto, operacao, tiporegisto, data, userid, quantidade) " +
Se por fim quiser alterar a variavel msql , visto que é uma string posso em qualquer parte do procedimento fazer drops,
alterar permissões se conhecer a estrutura da tabela de permissões ( que poderia estar exposto em outras partes do codigo)
para isto basta abrir o IE ou o mozilla com um debuger de javascript, por breakpoints no javascript, adicionar watchs para variaveis ( Centro, incDate, msql,etc) e mudar os valores quando parar no breakpoint .
Sem falar que também se pode fazer isto com o Visual Studio, Eclipse, NetBeans que têm ferramentas de depuração mais poderosas.
function insertDoc(Centro, Estrutura, Area, Produto, Operacao, TipoRegisto, ShortDt, User, Quantidade, sysDate, allow) {
var xml, msql, QantFix, incDate;
var doc, docAttr, docChilds, nor;
debugger;
( Break Point Aqui) - a partir daqui alterava os parametros de entrada.
incDate = ShortDt;
QantFix = Quantidade;
if (allow == "A")
QantFix = calculaQuantidadeACT(Centro, Estrutura, Area, Produto, Operacao, TipoRegisto, ShortDt, User, parseInt(Quantidade), sysDate, allow);
while (incDate <= sysDate) {
( Break Point Aqui) - a partir daqui alterava incDate para ser sempre inferior as sysDate .
msql = "declare @Centro as char(3); declare @estrutura as char(2); declare @area as char(2); declare @produto as char(2); declare @operacao as char(2); declare @TipoRegisto as char(30); declare @userid as char(8); declare @quantidade as int; declare @allow as char(1); " +
"select @Centro='" + Centro +
"'; select @estrutura=" + Estrutura +
"; select @area=" + Area +
"; select @produto=" + Produto +
"; select @operacao=" + Operacao +
"; select @TipoRegisto='" + TipoRegisto +
"'; select @userid='" + User +
"'; select @quantidade=" + Quantidade +
"; select @allow='" + allow +
"'; " +
"declare @DTPD as datetime; declare @DT as datetime; select @DTPD='" + ShortDt +
"'; select @DT='" + incDate +
"'; declare @RecebidosD as int; declare @PendentesD as int; declare @PendentesDA as int; ";
( Break Point Aqui) - a partir daqui alterava as variaveis do procedimento .
if (ShortDt == incDate) {
msql = msql + "" +
"select @RecebidosD=(select quantidade from tregisto " +
"where centro=@Centro and estrutura=@estrutura and area=@area and produto=@produto and operacao=@operacao and tiporegisto=@tiporegisto and data=@DT); " +
"if (@RecebidosD is null) begin " +
"insert into tregisto (centro, estrutura, area, produto, operacao, tiporegisto, data, userid, quantidade) " +
"values (@Centro, @estrutura , @area, @produto, @operacao, @TipoRegisto, @DT, @userid, @quantidade); " +
"select @RecebidosD=(select quantidade from tregisto " +
"where centro=@Centro and estrutura=@estrutura and area=@area and produto=@produto and operacao=@operacao and tiporegisto=@tiporegisto and data=@DT); "
( Break Point Aqui) - punha mais inserts ou drops ou delete na variavel msql .
.... (Omitido o resto por questões de brevidade)
}
É claro que não seria para qualquer um, mas basta ter vontade e tempo
Mostrar mensagens com a etiqueta Segurança. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Segurança. Mostrar todas as mensagens
segunda-feira, 4 de janeiro de 2010
Para responder ao fernando em ( É ou não possível... )
É ou não possível...
...com base no código do post 'Um exemplo do que não se deve fazer . . .' do nosso colega Luís Sousa, utilizar o ataque SQL Injection?
As respostas devem ser acompanhadas de justificativas, se possível.
Obrigado ao Luís pelo exemplo!
Abraço e Feliz 2010!
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
As respostas devem ser acompanhadas de justificativas, se possível.
Obrigado ao Luís pelo exemplo!
Abraço e Feliz 2010!
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
terça-feira, 7 de julho de 2009
Um exemplo do que não se deve fazer . . .
Já há algum tempo que não venho aqui ao blog, os vários projectos por onde tenho passado
no cliente tiram-me o tempo.
Desta vez, deparei-me com algo, que achei que tinha mesmo de ser partilhado convosco.
Encontrei uma função Javascript, que é incluída numa página com um código no mínimo curioso, apreciem:
function insertDoc(Centro, Estrutura, Area, Produto, Operacao, TipoRegisto, ShortDt, User, Quantidade, sysDate, allow) {
var xml, msql, QantFix, incDate;
var doc, docAttr, docChilds, nor;
debugger;
incDate = ShortDt;
QantFix = Quantidade;
if (allow == "A")
QantFix = calculaQuantidadeACT(Centro, Estrutura, Area, Produto, Operacao, TipoRegisto, ShortDt, User, parseInt(Quantidade), sysDate, allow);
while (incDate <= sysDate)
{
msql = "declare @Centro as char(3); declare @estrutura as char(2); declare @area as char(2); declare @produto as char(2); declare @operacao as char(2); declare @TipoRegisto as char(30); declare @userid as char(8); declare @quantidade as int; declare @allow as char(1); " +
"select @Centro='" + Centro + "'; select @estrutura=" + Estrutura + "; select @area=" + Area + "; select @produto=" + Produto + "; select @operacao=" + Operacao + "; select @TipoRegisto='" + TipoRegisto + "'; select @userid='" + User + "'; select @quantidade=" + Quantidade + "; select @allow='" + allow + "'; " +
"declare @DTPD as datetime; declare @DT as datetime; select @DTPD='" + ShortDt + "'; select @DT='" + incDate + "'; declare @RecebidosD as int; declare @PendentesD as int; declare @PendentesDA as int; ";
if (ShortDt == incDate) {
msql = msql + "" +
"select @RecebidosD=(select quantidade from tregisto " +
"where centro=@Centro and estrutura=@estrutura and area=@area and produto=@produto and operacao=@operacao and tiporegisto=@tiporegisto and data=@DT); " +
"if (@RecebidosD is null) begin " +
"insert into tregisto (centro, estrutura, area, produto, operacao, tiporegisto, data, userid, quantidade) " +
"values (@Centro, @estrutura , @area, @produto, @operacao, @TipoRegisto, @DT, @userid, @quantidade); " +
"select @RecebidosD=(select quantidade from tregisto " +
"where centro=@Centro and estrutura=@estrutura and area=@area and produto=@produto and operacao=@operacao and tiporegisto=@tiporegisto and data=@DT); "
.... (Omitido o resto por questões de brevidade)
}
Temos aqui um caso clássico de utilização de SQL client side, e disponível na página . . .
Algo a evitar!
no cliente tiram-me o tempo.
Desta vez, deparei-me com algo, que achei que tinha mesmo de ser partilhado convosco.
Encontrei uma função Javascript, que é incluída numa página com um código no mínimo curioso, apreciem:
function insertDoc(Centro, Estrutura, Area, Produto, Operacao, TipoRegisto, ShortDt, User, Quantidade, sysDate, allow) {
var xml, msql, QantFix, incDate;
var doc, docAttr, docChilds, nor;
debugger;
incDate = ShortDt;
QantFix = Quantidade;
if (allow == "A")
QantFix = calculaQuantidadeACT(Centro, Estrutura, Area, Produto, Operacao, TipoRegisto, ShortDt, User, parseInt(Quantidade), sysDate, allow);
while (incDate <= sysDate)
{
msql = "declare @Centro as char(3); declare @estrutura as char(2); declare @area as char(2); declare @produto as char(2); declare @operacao as char(2); declare @TipoRegisto as char(30); declare @userid as char(8); declare @quantidade as int; declare @allow as char(1); " +
"select @Centro='" + Centro + "'; select @estrutura=" + Estrutura + "; select @area=" + Area + "; select @produto=" + Produto + "; select @operacao=" + Operacao + "; select @TipoRegisto='" + TipoRegisto + "'; select @userid='" + User + "'; select @quantidade=" + Quantidade + "; select @allow='" + allow + "'; " +
"declare @DTPD as datetime; declare @DT as datetime; select @DTPD='" + ShortDt + "'; select @DT='" + incDate + "'; declare @RecebidosD as int; declare @PendentesD as int; declare @PendentesDA as int; ";
if (ShortDt == incDate) {
msql = msql + "" +
"select @RecebidosD=(select quantidade from tregisto " +
"where centro=@Centro and estrutura=@estrutura and area=@area and produto=@produto and operacao=@operacao and tiporegisto=@tiporegisto and data=@DT); " +
"if (@RecebidosD is null) begin " +
"insert into tregisto (centro, estrutura, area, produto, operacao, tiporegisto, data, userid, quantidade) " +
"values (@Centro, @estrutura , @area, @produto, @operacao, @TipoRegisto, @DT, @userid, @quantidade); " +
"select @RecebidosD=(select quantidade from tregisto " +
"where centro=@Centro and estrutura=@estrutura and area=@area and produto=@produto and operacao=@operacao and tiporegisto=@tiporegisto and data=@DT); "
.... (Omitido o resto por questões de brevidade)
}
Temos aqui um caso clássico de utilização de SQL client side, e disponível na página . . .
Algo a evitar!
Etiquetas:
Desenvolvimento,
Javascript,
Segurança,
Web
domingo, 29 de junho de 2008
Contra factos, não há argumentos
Segundo o 2007 Symantec Internet Security Threat Report, as vulnerabilidades em Aplicações Web, representam 61% de todas as 'pragas' conhecidas.
FYI, eis aqui algumas delas:
-Cross-Site Scripting
-Cross-Site Request Forgery
-SQL Injection (o famoso!)
-XPATH Injection
É, ou não, motivo de preocupação?
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
FYI, eis aqui algumas delas:
-Cross-Site Scripting
-Cross-Site Request Forgery
-SQL Injection (o famoso!)
-XPATH Injection
É, ou não, motivo de preocupação?
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
quarta-feira, 18 de junho de 2008
Microsoft Security Development Lifecycle (SDL)
Para quem ainda não leu, vale a pena. O SDL, é o processo adotado pela Microsoft para o desenvolvimento de software, na própria Microsoft (sem ser redundante).
O objectivo é a descoberta de vulnerabilidades de segurança durante as várias etapas do desenvolvimento de software.
O documento pode ser obtido em:
http://www.microsoft.com/downloads/details.aspx?FamilyID=2412c443-27f6-4aac-9883-f55ba5b01814&displaylang=en
Boa leitura!
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
O objectivo é a descoberta de vulnerabilidades de segurança durante as várias etapas do desenvolvimento de software.
O documento pode ser obtido em:
http://www.microsoft.com/downloads/details.aspx?FamilyID=2412c443-27f6-4aac-9883-f55ba5b01814&displaylang=en
Boa leitura!
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
terça-feira, 10 de junho de 2008
'Discutir' segurança(2)
Eu penso nas ameaças e naquilo que posso fazer para combatê-las(contramedidas). Para conhecerem algumas dessas ameaças e suas respectivas contramedidas, dêem um 'salto' em http://www.microsoft.com/portugal/seguranca/dadescanso/default_home.mspx - A Microsoft Portugal, criou o sitio chamado 'Security MitingPoint' - lá, assistam ao webcast 'Threats and Countermeasures' em português. Entre outras coisas, este webcast aborda o 'STRIDE Threat Model', que é a técnica usada para identificar e categorizar as ameaças de que uma Aplicação está exposta. Não percam!
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
domingo, 8 de junho de 2008
'Discutir' segurança
Quando ouvem falar sobre Segurança em Aplicações Web, o que pensam sobre isto? Partilhem os vossos pensamentos/opiniões aqui, no Blog!
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
quarta-feira, 4 de junho de 2008
Atenção: alerta vermelho!
Em uma dessas minhas leituras sobre segurança, nomeadamente, um artigo que falava sobre SQL Injection, um trecho de um comentário chamou a minha atenção. O trecho:
"...Se estás a desenvolver websites e não sabe sobre SQL Injection, então não devias estar a desenvolver websites..."
Nós sabemos sobre SQL Injection e sabemos como evitá-lo, não é, pessoal?
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
"...Se estás a desenvolver websites e não sabe sobre SQL Injection, então não devias estar a desenvolver websites..."
Nós sabemos sobre SQL Injection e sabemos como evitá-lo, não é, pessoal?
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
segunda-feira, 2 de junho de 2008
Segurança e Performance em Aplicações .NET
Colegas Agapianos,
Estes são os temas que vou partilhar convosco aqui no Blog. De certeza que toda a gente já ouviu falar a respeito mas, na pratica, como lidam com estes temas no vosso dia-a-dia? Ao longo das nossas 'conversas', vamos abordar o CLR, Garbage Collection, recursos 'engraçados' do VS, ferramentas de desempenho, técnicas de Code Review para a detecção de vulnerabilidades no código, só para citar alguns.
Vamos 'bombar' este Blog pessoal! Então, o encontro fica marcado!
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
Estes são os temas que vou partilhar convosco aqui no Blog. De certeza que toda a gente já ouviu falar a respeito mas, na pratica, como lidam com estes temas no vosso dia-a-dia? Ao longo das nossas 'conversas', vamos abordar o CLR, Garbage Collection, recursos 'engraçados' do VS, ferramentas de desempenho, técnicas de Code Review para a detecção de vulnerabilidades no código, só para citar alguns.
Vamos 'bombar' este Blog pessoal! Então, o encontro fica marcado!
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
Subscrever:
Mensagens (Atom)