문제

아래 코드로 고군분투하고 있습니다. 로그인 한 사용자 사용자 이름을 읽고 라이센스라는 SQL 테이블에 이름을 삽입하려고합니다. 테이블에는 2 열이 포함되어 있습니다. 라이센스 번호가 포함되어 있습니다. 이 페이지가로드 될 때 사용자 이름을 측면과 함께 삽입해야합니다. 현재이 페이지는 지속적으로 루프를하고 테이블에 아무것도 삽입되지 않습니다. Connection1.asp 내부의 사용자는 데이터베이스에 대한 읽기/쓰기 액세스가 있습니다.

어떤 아이디어? 감사

<%@LANGUAGE="VBSCRIPT" LCID=1033%>
<%
aName = Split(Request.ServerVariables("LOGON_USER"), "\")
user = aName(UBound(aName))
user = UCase(user)
Erase aName
%>
<!--#include file="Connections/connection1.asp" -->
<%
Dim Recordset1
Dim Recordset1_numRows
Set Recordset1 = Server.CreateObject("ADODB.Recordset")
Recordset1.ActiveConnection = MM_connection1_STRING
Recordset1.Source = "SELECT * FROM Licenses2 WHERE userid = '" & user & "';"
Recordset1.Open()
%>
<HTML><HEAD></HEAD>
<BODY leftmargin="5" onLoad="setTimeout('reloadFunction()',500000)">

<% Do While NOT Recordset1.EOF %>
<% strUserName =(Recordset1.Fields.Item("userid").Value)%>
<% response.write strUserName %>'s Serial Number:

<% strSerial =(Recordset1.Fields.Item("serial").Value)%>
<% response.write strSerial %>
<% Recordset1.movenext %>

<% loop %>

<%
If strUserName = user then 
    'record found do nothing
    'response.write "user found"
else
    adoCon.Execute =  "SET ROWCOUNT 1; UPDATE Licenses2 SET userid = '" & user & "' WHERE userid = 'NULL';"
    Response.AddHeader "Refresh", "3" 
End if
%>
</BODY>
</HTML>

<%
Recordset1.Close()
Set Recordset1 = Nothing
Set Recordset2 = Nothing
%>
도움이 되었습니까?

해결책

사용자를 찾을 수없는 경우 업데이트 대신 인서트를 수행해야합니까?

업데이트가 올바른 경우 마지막 Null을 변경하십시오 ... 따옴표를 제거하십시오. 지금 당신은 문자열 값을 비교하고 있습니다 'NULL' 가치 대신 NULL 그리고 그것은 널이어야합니다

SET ROWCOUNT 1; UPDATE Licenses2 SET userid = '" & user & "' WHERE userid IS NULL;

또한 댓글을 달 수 있는지 확인하십시오 <BODY ... > 재 장전 기능없이 새 것을 태그하고 만들고 차이가 있는지 확인하십시오.

마지막으로 코드가 주입 공격이 발생하기 쉽기 때문에 SQL 주입을 읽으십시오. SQL 주입에 대해서는 stackoverflow.com에서 검색하면 많은 설명, 예제 및 치료법이 있습니다.

다른 팁

logon_user가 실제로 데이터를 반환하는지 확인하십시오. IIS 보안이 '익명'액세스로 설정된 경우에는 아무것도 채워지지 않습니다.

코드는 또한 SQL 주입 공격이 발생하기 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top