초보자 ASP 프로그래밍의 기본 규칙 1. 초보자가 저지르는 일반적인 실수
포럼의 많은 게시물 코드에서 필드 유형이 잘못된 일반적인 기본 오류를 보았습니다.
프로그램과 데이터베이스는 밀접하게 연결되어 있습니다. 텍스트 유형이나 시간 유형의 데이터베이스 필드는 작은따옴표를 사용합니다.
예를 들어, 다음 수정된 문은 다음과 같습니다.
conn.execute 업데이트 카운트 세트 counts='&counts&' 여기서 num=&num& 및 Atime='&now()&'
등호 왼쪽은 필드 이름, 오른쪽은 전달된 변수 이름입니다. counts 필드는 텍스트 형식이므로 쓰기 전후에 작은따옴표를 추가해야 합니다. 후속 검색문에서 num 필드는 숫자 유형이므로 앞뒤에 작은따옴표가 없습니다. Atime 필드는 시간 유형이므로 앞뒤에 작은따옴표가 필요합니다.
가장 중요한 것은 ID로 쿼리하는 것입니다. ID 필드는 고유하고 숫자 유형입니다. 당연히 ID 번호를 쿼리할 때 앞뒤에 작은따옴표가 있을 수 없습니다.
conn.execute 업데이트 카운트 세트 counts='&counts&' 여기서 id='&id&' '잘못된 쓰기 방식
conn.execute 업데이트 카운트 set counts='&counts&' 여기서 id=&id '올바른 쓰기 방법
2. ACCESS 데이터베이스 연결
일반적으로 데이터베이스에 연결하는 방법에는 두 가지가 있습니다. 초보자는 기본적으로 어떤 방법을 사용해야 하는지, 어떤 상황에서 어떤 방법을 사용해야 하는지 모르거나 둘 다의 원리를 모릅니다.
① 데이터베이스 파일에 직접 연결
conn = Server.CreateObject(ADODB.Connection) 설정
conn.Open DRIVER={Microsoft Access 드라이버(*.mdb)}; DBQ=&Server.MapPath(database/yanhang.mdb)
②데이터 소스를 통해 데이터베이스 파일을 연결합니다.
conn = Server.CreateObject(ADODB.Connection) 설정
conn.Open 공급자=Microsoft.Jet.OLEDB.4.0 데이터 원본=&Server.MapPath(database/yanhang.mdb)
그렇다면 둘 중 어느 것이 더 좋을까요? 물론 두 번째입니다. 첫 번째는 클라이언트 브라우저가 실제로 데이터베이스를 직접 읽는 것이므로 보안이 많이 다르기 때문에 두 번째는 데이터 소스를 통해 연결됩니다. 서버 데이터를 사용하는 소스툴은 클라이언트와 연결되어 있고 클라이언트와는 아무런 관련이 없으므로 데이터베이스가 클라이언트에 노출되지 않으며 보안 요소가 훨씬 높습니다.
ACCESS 데이터베이스 해당 프로그램 적용: ① 데이터베이스 파일에 직접 연결
conn.Open DRIVER={Microsoft Access 드라이버(*.mdb)}; DBQ=&Server.MapPath(database/yanhang.mdb)
이 데이터베이스 연결 방법의 경우 다음 문을 추가합니다.
set rs=server.createobject(adodb.recordset) '(올바른 쓰기)
rs.open dndj,conn,1,3에서 *를 선택합니다.
rs.addnew
RS(bh) = bh
RS(bm) = bm
RS(xm) = xm
RS(xsq) = xsq
RS.업데이트
RS.닫기
rs=아무것도 설정하지 않음
set rs=server.createobject(adodb.recordset) '(잘못된 쓰기)
sql=dndj(bh,bm,xm,xsq) 값('bh','bm','xm','xsq')에 삽입
rs.open SQL,콘,1,3
ACCESS 데이터베이스 해당 프로그램 적용 : ② 데이터 소스를 통해 데이터베이스 파일 연결
conn.Open 공급자=Microsoft.Jet.OLEDB.4.0 데이터 원본=&Server.MapPath(database/yanhang.mdb)
이 데이터베이스 연결 방법의 경우 다음 문을 추가합니다.
conn.execute dndj(bh,bm,xm,xsq) 값에 삽입('&bh&','&bm&','&xm&','&xsq&') '(올바른 쓰기)
set rs=server.createobject(adodb.recordset) '(잘못된 쓰기)
sql=dndj(bh,bm,xm,xsq) 값('bh','bm','xm','xsq')에 삽입
rs.open SQL,콘,1,3
3. 큰따옴표의 적용
일반적으로 우리는 <a href=abc.asp?id=<%=rs(id)%>>슈퍼 링크</a>와 같은 슈퍼 링크를 작성합니다.
하지만 이 하이퍼링크를 ASP로 컴파일하면 어떻게 될까요?
response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(올바른 쓰기)
response.write <a href='abc.asp?id=&rs(id)&'>Super Connection</a> '(올바른 쓰기)
response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(올바른 쓰기)
response.write <a href=abc.asp?id=<%=rs(id)%>>슈퍼 연결</a> '(잘못 작성)
response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(잘못 작성)
양식은 asp <input type=text name=id value=<%rs(id)%> />로 컴파일됩니다.
response.write <input type=text name=id value=&rs(id)& /> '(올바른 쓰기) 참고: 여기에는 큰따옴표가 3개 있습니다.
response.write <input type='text' name='id' value='&rs(id)&' /> '(올바른 쓰기)
response.write <input type=text name=id value=&rs(id)& /> '(올바른 쓰기)
response.write <input type=text name=id value=<%=rs(id)%> /> '(잘못 작성)
response.write <input type=text name=id value=&rs(id)& /> '(잘못 작성)
초보자를 위한 ASP 프로그래밍의 기본 규칙
4. ACCESS 데이터베이스 다운로드를 방지하는 여러 가지 방법
많은 동적 사이트에서는 데이터베이스를 광범위하게 사용하며, 데이터베이스는 자연스럽게 사이트의 핵심 파일이 되었습니다. 데이터베이스가 불법적으로 다운로드되면 악의적인 사람이 웹사이트를 파괴할 가능성이 매우 높습니다. 아니면 정보를 훔치거나.
아래 제시된 방법은 가상 호스트 공간을 사용하는 사용자와 IIS 제어 권한을 가진 사용자에게 적용 가능합니다!
1: 가상 호스트 공간 구입은 IIS 제어 권한이 없는 사용자에게 적합합니다.
1: 상상력을 발휘하여 데이터베이스 파일 이름을 수정하세요.
이것이 가장 기본입니다. 지금은 데이터베이스 파일명을 바꾸기엔 너무 게으른 분들이 많지 않은 것 같죠? 무엇으로 변경할지는 귀하에게 달려 있습니다. 최소한 파일 이름이 복잡하고 추측할 수 없는지 확인하십시오. 물론 현재로서는 데이터베이스가 위치한 디렉토리에는 디렉토리 검색 권한이 없습니다!
2: 데이터베이스 이름 접미사를 ASA, ASP 등으로 변경합니다.
이게 인기가 많다고 들었는데 여러 번 테스트해본 결과 이상적이지 않다는 걸 알게 됐어요. 정말 다운로드를 막고 싶다면 몇 가지 바이너리 필드와 기타 설정을 한마디로 추가해야 합니다. 복잡함(데이터베이스가 많은 경우 이 방법은 실제로 별로 좋지 않음)
3: 데이터베이스 이름 앞에 #을 추가합니다.
데이터베이스 파일의 앞 이름에 #을 추가한 다음 데이터베이스 연결 파일(예: conn.asp)에서 데이터베이스 주소를 수정하면 됩니다. 다운로드 시 # 기호 앞 부분만 인식이 가능하며, 예를 들어 http://bbs.bccn.net/date/#123을 다운로드 하려는 경우 다음 부분은 자동으로 제거되는 것이 원칙입니다. .mdb(존재한다고 가정). IE든 FLASHGET이든 상관없이 얻을 수 있는 것은 http://bbs.bccn.net/date/index.htm입니다.
또한 데이터베이스 파일 이름에 일부 공백을 유지하는 것도 비슷한 역할을 합니다. 주소 확인을 위한 HTTP 프로토콜의 특수성으로 인해 공백은 http://bbs.bccn.net/date와 같이 %20으로 인코딩됩니다. /123 456.mdb
다운로드시 http://bbs.bccn.net/date/123%20456.mdb. 우리 디렉터리에는 123%20456.mdb 파일이 전혀 없기 때문에 다운로드가 유효하지 않습니다. 데이터베이스 주소를 공개하더라도 일반적으로 http와 같은 두 방법 모두 #+space를 사용하는 것이 가장 좋습니다. : //bbs.bccn.net/date/#123 456.mdb
4: 데이터베이스 암호화
ACCESS를 사용하여 데이터베이스를 단독 모드로 연 후 도구-보안-데이터베이스 비밀번호 설정으로 이동하여 암호화 후 데이터베이스 연결 페이지를 다음과 같이 수정합니다.
conn.open 드라이버={microsoft 액세스 드라이버(*.mdb)};uid=admin;pwd=데이터베이스 비밀번호;dbq=데이터베이스 경로
이번 수정 이후에는 데이터베이스를 다운로드 받더라도 다른 사람이 열 수 없습니다. (단, 데이터베이스 연결 페이지의 비밀번호가 유출되지 않은 경우)
그러나 Access 데이터베이스의 암호화 메커니즘은 상대적으로 간단하기 때문에 비밀번호가 설정되어 있어도 암호 해독이 쉽다는 점은 주목할 가치가 있습니다. 데이터베이스 시스템은 사용자가 입력한 비밀번호를 고정키와 XOR하여 암호화된 문자열을 구성하고, 이를 주소 &H42부터 시작하는 *.mdb 파일 영역에 저장한다. 따라서 훌륭한 프로그래머는 수십 줄의 작은 프로그램을 쉽게 만들어 Access 데이터베이스의 암호를 쉽게 얻을 수 있습니다. 따라서 데이터베이스가 다운로드되는 한 보안은 알 수 없는 상태로 유지됩니다.
2: 호스트 제어권을 가집니다. (물론 여기서는 가상 공간 설정을 계속 사용할 수 있습니다.)
5: 데이터베이스는 WEB 디렉터리 외부에 위치합니다.
WEB 디렉터리가 e:/webroot인 경우 데이터베이스를 e:/data 폴더에 넣고 e:/webroot의 데이터베이스 연결 페이지로 이동할 수 있습니다.
데이터베이스 연결 주소를 ../data/#123 456.mdb 형식으로 수정하면 데이터베이스는 정상적으로 호출은 되지만 WEB 디렉터리에 없기 때문에 다운로드가 불가능합니다! 이 방법은 일반적으로 가상 공간을 구매하는 사용자에게 적합합니다.
6: ODBC 데이터 소스를 사용합니다.
ASP와 같은 프로그래밍에서는 가능하면 ODBC 데이터 소스를 사용하고 프로그램에 데이터베이스 이름을 쓰지 않는 것이 좋습니다. 그렇지 않으면 ASP 소스 코드의 기밀성과 함께 데이터베이스 이름이 손실됩니다.
예를 들어:
conn.open 드라이버={Microsoft Access 드라이버(*.mdb)};dbq=&Server.MapPath(../123/abc/asfadf.mdb)
데이터베이스 이름이 아무리 이상해도, 숨겨진 디렉터리가 아무리 깊어도 ASP 소스 코드가 손상된 후에는 쉽게 다운로드할 수 있다는 것을 알 수 있습니다.
ODBC 데이터 소스를 사용하면 다음과 같은 문제가 발생하지 않습니다. conn.open ODBC-DSN 이름이지만 디렉터리가 이동되면 데이터 소스를 재설정해야 합니다.
7: MDB와 같은 데이터베이스 이름의 확장 매핑을 추가합니다.
이 방법은 IIS 설정을 수정하여 수행됩니다. IIS를 제어하는 친구에게는 적합하지만 관리자가 설정하지 않은 경우 가상 호스트를 구입하는 사용자에게는 적합하지 않습니다. 현재로서는 이 방법이 가장 좋은 것 같아요. 단 한 번의 변경으로 전체 사이트의 데이터베이스가 다운로드되는 것을 방지할 수 있습니다. 코드를 수정하지 않고 대상 주소가 노출되어도 다운로드를 방지할 수 있습니다.
설정:
IIS 속성---홈 디렉터리---구성---매핑---응용 프로그램 확장에서 .mdb 파일의 응용 프로그램 구문 분석을 추가합니다. 여기서 선택한 DLL(또는 EXE 등)은 임의적이지 않은 것으로 보입니다. 선택이 적절하지 않은 경우에는 asp.dll 등을 선택하지 않는 것이 가장 좋습니다. 직접 테스트해볼 수 있어요
수정 후 http://bbs.bccn.net/data/dvbbs6.mdb와 같은 데이터베이스를 다운로드하십시오. 나타납니다(404, 500 등의 오류).
8: .net 사용의 장점
Dongwang의 Mu Niao는 불법 파일 다운로드를 방지하기 위해 WBAL 안티 핫링크 도구를 작성했습니다. 이 포럼의 전문가가 IIS에 로드되는 .dll인 데이터베이스 다운로드 방지 플러그인을 게시한 적이 있는 것을 기억합니다.
그러나 이는 로컬이 아닌 다운로드만 방지할 뿐이며 데이터베이스 다운로드를 실제로 방지하는 기능은 없습니다. 하지만 이 방법은 5번째 방법과 유사합니다.
로컬로 다운로드할 수 없도록 .NET 파일을 수정할 수 있습니다!
이 중 7번째와 8번째 방법만 일률적으로 변경할 수 있으며, 한 번만 구성을 수정하면 전체 사이트의 데이터베이스가 다운로드되는 것을 방지할 수 있으며, 그 외 여러 가지 방법은 각각 데이터베이스 이름과 연결 파일을 수정해야 합니다. 더 번거롭지만 가상 호스트의 경우 친구는 이것만 할 수 있습니다!
사실 6번째 방법은 5번째 방법을 확장한 것인데, 이는 특별한 기능을 구현할 수 있지만, .net을 지원하지 않거나 번거로운 설정을 두려워하는 호스트의 경우 5번째 방법을 직접 사용하는 것이 더 좋으며, 6번째 방법이 기본적으로 사용됩니다. 방법은 동일한 호스트의 포럼이나 방명록을 복사하여 연결한 다음 클릭하여 다운로드할 수 있습니다(해당 참조 페이지는 동일한 호스트에서 왔기 때문).
각각의 방법에는 장단점이 있으므로 선택적으로 사용하시기 바랍니다. 이러한 방법은 절대적으로 안전하지 않습니다. 웹 사이트 관리자는 일부 시스템의 보안과 ASP 코드 자체 작성의 보안에도 주의를 기울여야 합니다. 그렇지 않으면 누군가가 데이터베이스를 다운로드하거나 수정할 수 있습니다.