Regras básicas para programação asp iniciante 1. Erros comuns cometidos por novatos
Vi um erro básico comum no código de muitos posts do fórum, que é o tipo de campo errado.
O programa e o banco de dados estão intimamente conectados. Os campos do banco de dados do tipo texto ou hora usam aspas simples.
Por exemplo, a seguinte instrução modificada:
conn.execute update Contagens set counts='&counts&' onde num=&num& e Atime='&now()&'
O lado esquerdo do sinal de igual é o nome do campo, e o lado direito do sinal de igual é o nome da variável passada. O campo de contagem é do tipo texto, portanto, devem ser adicionadas aspas simples antes e depois de escrever. seja escrevendo ou consultando. Na instrução de pesquisa subsequente, o campo num é do tipo numérico, portanto, não há aspas simples antes e depois dele.
O mais importante é consultar por ID. O campo ID é único e do tipo numérico. Obviamente não pode haver aspas simples antes e depois na consulta do número do ID.
conn.execute update Contagens set counts='&counts&' where id='&id&' 'maneira errada de escrever
conn.execute update Contagens set counts='&counts&' where id=&id 'Maneira correta de escrever
2. ACESSE a conexão do banco de dados
Normalmente, existem duas maneiras de se conectar a bancos de dados. Os novatos basicamente não sabem qual maneira usar, ou qual usar em quais circunstâncias, ou não conhecem os princípios de ambos.
① Conecte-se diretamente aos arquivos do banco de dados
Definir conexão = Server.CreateObject(ADODB.Connection)
conn.Open DRIVER={Driver do Microsoft Access (*.mdb)}; DBQ=&Server.MapPath(banco de dados/yanhang.mdb)
②Conecte o arquivo do banco de dados por meio da fonte de dados
Definir conexão = Server.CreateObject(ADODB.Connection)
conn.Open Provider=Microsoft.Jet.OLEDB.4.0 Fonte de dados=&Server.MapPath(banco de dados/yanhang.mdb)
Então, qual dos dois é melhor? Claro que é o segundo, porque o primeiro é que o navegador do cliente realmente lê o banco de dados diretamente, então a segurança é muito diferente. que usa dados do servidor A ferramenta de origem está conectada e não tem nada a ver com o cliente, portanto o banco de dados não será exposto ao cliente e o fator de segurança é muito maior.
Aplicação do programa correspondente do banco de dados ACCESS: ① Conecte-se diretamente aos arquivos do banco de dados
conn.Open DRIVER={Driver do Microsoft Access (*.mdb)}; DBQ=&Server.MapPath(banco de dados/yanhang.mdb)
Para este método de conexão com o banco de dados, adicione a instrução:
set rs=server.createobject(adodb.recordset) '(escrita correta)
rs.open selecione * de dndj,conn,1,3
rs.addnew
rs(bh) = bh
rs(bm) = bm
rs(xm) = xm
rs(xsq) = xsq
rs.atualização
rs.fechar
definir rs = nada
set rs=server.createobject(adodb.recordset) '(escrita errada)
sql=inserir em dndj(bh,bm,xm,xsq) valores('bh','bm','xm','xsq')
rs.open sql,conn,1,3
Aplicação do programa correspondente do banco de dados ACCESS: ② Conecte arquivos de banco de dados por meio de fontes de dados
conn.Open Provider=Microsoft.Jet.OLEDB.4.0 Fonte de dados=&Server.MapPath(banco de dados/yanhang.mdb)
Para este método de conexão com o banco de dados, adicione a instrução:
conn.execute inserir em dndj(bh,bm,xm,xsq) valores('&bh&','&bm&','&xm&','&xsq&') '(escrita correta)
set rs=server.createobject(adodb.recordset) '(escrita errada)
sql=inserir em dndj(bh,bm,xm,xsq) valores('bh','bm','xm','xsq')
rs.open sql,conn,1,3
3. Aplicação de aspas duplas
Normalmente escrevemos um super link como este <a href=abc.asp?id=<%=rs(id)%>>super link</a>
Mas e se esse hiperlink for compilado em asp?
response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(escrita correta)
response.write <a href='abc.asp?id=&rs(id)&'>Super Connection</a> '(escrita correta)
response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(escrita correta)
response.write <a href=abc.asp?id=<%=rs(id)%>>Super conexão</a> '(escrita errada)
response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(escrita errada)
O formulário é compilado em asp <input type=text name=id value=<%rs(id)%> />
response.write <input type=text name=id value=&rs(id)& /> '(escrita correta) Nota: Há três aspas duplas aqui
response.write <input type='text' name='id' value='&rs(id)&' /> '(escrita correta)
response.write <input type=text name=id value=&rs(id)& /> '(escrita correta)
response.write <input type=text name=id value=<%=rs(id)%> /> '(escrita errada)
response.write <input type=text name=id value=&rs(id)& /> '(escrita errada)
Regras básicas de programação asp para iniciantes
4. Vários métodos para evitar o download do banco de dados ACCESS
Muitos sites dinâmicos fazem uso extensivo de bancos de dados, e o banco de dados tornou-se naturalmente o arquivo principal de um site. Depois que o banco de dados for baixado ilegalmente, é muito provável que pessoas mal-intencionadas destruam o site. Ou roubar informações.
Os métodos fornecidos abaixo são aplicáveis a usuários que usam espaço de host virtual e usuários com direitos de controle do IIS!
1: A compra de espaço de host virtual é adequada para quem não tem controle IIS
1: Use sua imaginação para modificar o nome do arquivo do banco de dados
Este é o mais básico. Não acho que haja muitas pessoas com preguiça de alterar o nome do arquivo do banco de dados agora, certo? Quanto ao que mudar, depende de você. Pelo menos, certifique-se de que o nome do arquivo seja complexo e indecifrável. É claro que, neste momento, o diretório onde seu banco de dados está localizado não pode ter permissões de navegação no diretório!
2: Altere o sufixo do nome do banco de dados para ASA, ASP, etc.
Ouvi dizer que isso é muito popular, mas testei várias vezes e descobri que não é o ideal. Se você realmente deseja evitar downloads, é necessário adicionar alguns campos binários e outras configurações. complexo (se o seu banco de dados tiver muitos. Nesse caso, esse método não é realmente muito bom)
3: Adicione # antes do nome do banco de dados
Basta adicionar # ao nome frontal do arquivo de banco de dados e, em seguida, modificar o endereço do banco de dados no arquivo de conexão do banco de dados (como conn.asp). O princípio é que durante o download, apenas a parte anterior ao sinal # pode ser reconhecida, e as seguintes partes serão removidas automaticamente. Por exemplo, se você deseja fazer o download: http://bbs.bccn.net/date/#123. .mdb (supondo que exista). Seja IE ou FLASHGET, etc., o que você obtém é http://bbs.bccn.net/date/index.htm
Além disso, reter alguns espaços no nome do arquivo do banco de dados também desempenha um papel semelhante. Devido à particularidade do protocolo HTTP para resolução de endereços, os espaços serão codificados como% 20, como http://bbs.bccn.net/date. /123 456.mdb
Ao baixar, http://bbs.bccn.net/date/123%20456.mdb. Nosso diretório não contém o arquivo 123%20456.mdb, portanto, o download é inválido. Mesmo se você expor o endereço do banco de dados, outras pessoas geralmente não poderão baixá-lo. É melhor usar #+espaço em ambos os métodos, como http. : //bbs.bccn.net/date/#123 456.mdb
4: Criptografe o banco de dados
Após usar o ACCESS para abrir seu banco de dados em modo exclusivo, vá em Ferramentas-Segurança-Defina a senha do banco de dados e modifique a página de conexão do banco de dados após a criptografia, como:
conn.open driver={driver de acesso microsoft (*.mdb)};uid=admin;pwd=senha do banco de dados;dbq=caminho do banco de dados
Após esta modificação, mesmo que o banco de dados seja baixado, outras pessoas não poderão abri-lo (desde que a senha na página de conexão do seu banco de dados não tenha vazado)
Mas é importante notar que, como o mecanismo de criptografia do banco de dados Access é relativamente simples, mesmo que uma senha seja definida, a descriptografia é fácil. O sistema de banco de dados forma uma string criptografada fazendo XOR da senha inserida pelo usuário com uma chave fixa e a armazena na área do arquivo *.mdb a partir do endereço &H42. Assim, um bom programador pode facilmente fazer um pequeno programa com dezenas de linhas para obter facilmente a senha de qualquer banco de dados Access. Portanto, enquanto o banco de dados for baixado, sua segurança permanecerá desconhecida.
Dois: Tenha controle de host (é claro que as configurações do espaço virtual ainda podem ser usadas aqui)
5: O banco de dados é colocado fora do diretório WEB
Se o seu diretório WEB for e:/webroot, você pode colocar o banco de dados na pasta e:/data e acessar a página de conexão do banco de dados em e:/webroot.
Modifique o endereço de conexão do banco de dados para o formato: ../data/#123 456.mdb, para que o banco de dados possa ser chamado normalmente, mas não possa ser baixado porque não está no diretório WEB! Este método geralmente é adequado para usuários que adquirem espaço virtual.
6: Use fonte de dados ODBC.
Em programação como ASP, se possível, você deve tentar usar fontes de dados ODBC e não escrever o nome do banco de dados no programa, caso contrário, o nome do banco de dados será perdido junto com a confidencialidade do código-fonte ASP.
Por exemplo:
conn.open driver={Driver do Microsoft Access (*.mdb)};dbq=&Server.MapPath(../123/abc/asfadf.mdb)
Pode-se observar que por mais estranho que seja o nome do banco de dados, por mais profundo que seja o diretório oculto, depois que o código-fonte ASP for comprometido, ele poderá ser facilmente baixado.
Se você usar a fonte de dados ODBC, não haverá esse problema: conn.open nome ODBC-DSN, mas isso é mais irritante. Se o diretório for movido, a fonte de dados deverá ser redefinida!
7: Adicione mapeamento estendido do nome do banco de dados, como MDB
Este método é obtido modificando as configurações do IIS. É adequado para amigos que têm controle do IIS, mas não é adequado para usuários que compram hosts virtuais (a menos que o administrador o tenha configurado). Acho que esse método é o melhor atualmente. Com apenas uma alteração, todo o banco de dados do site pode ser impedido de ser baixado. Os downloads podem ser evitados mesmo se o endereço de destino for exposto sem modificar o código.
configurar:
Adicione a análise do aplicativo do arquivo .mdb em Propriedades do IIS --- Diretório inicial --- Configuração --- Mapeamento --- Extensão do aplicativo. Observe que a DLL (ou EXE, etc.) selecionada aqui não parece ser arbitrária. Se a seleção não for apropriada, o arquivo MDB ainda pode ser baixado. Observe que é melhor não selecionar asp.dll, etc. Você pode testar você mesmo
Após esta modificação, baixe o banco de dados como: http://bbs.bccn.net/data/dvbbs6.mdb. Ele aparecerá (erros como 404 ou 500)
8: Vantagens de usar .net
Mu Niao de Dongwang escreveu uma ferramenta anti-hotlink WBAL para evitar downloads ilegais de arquivos. Lembro que um especialista neste fórum publicou uma vez um plug-in anti-download de banco de dados, que é um .dll carregado no IIS.
Porém, aquele apenas impede downloads não locais e não tem a função de realmente impedir downloads de bancos de dados. Mas este método é semelhante ao 5º método
Você pode modificar o arquivo .NET para que não possa ser baixado localmente!
Entre esses métodos, apenas o 7º e o 8º métodos podem ser alterados uniformemente. Após modificar a configuração uma vez, o download do banco de dados de todo o site pode ser impedido. Os outros vários métodos requerem a modificação do nome do banco de dados e do arquivo de conexão, respectivamente. mais problemático, mas para amigos anfitriões virtuais só pode fazer isso!
Na verdade, o 6º método deveria ser uma extensão do 5º método, que pode realizar funções especiais. No entanto, para hosts que não suportam .net ou têm medo de configurações problemáticas, é melhor usar o 5º método diretamente e o 5º método. O 6º método é usado por padrão. Método, você ainda pode publicar copiando e conectando-se ao fórum ou livro de visitas do mesmo host e depois clicando para fazer o download (porque essas páginas de referência são do mesmo host)
Cada um desses métodos tem seus prós e contras, portanto, use-os seletivamente. Esses métodos não são absolutamente seguros. Os administradores de sites também precisam prestar atenção à segurança de alguns sistemas e à segurança de escrever o próprio código ASP. Caso contrário, ainda é possível que alguém baixe ou modifique o banco de dados!