2014-02-10 2 views
0

일부 ASP 코드에서이를 보았지만 마지막 줄, 특히 Name =과 AND 사이의 모든 사도 및 따옴표를 이해하지 못했습니다. 무엇이 추가되고 있습니까? 왜 우리는 둘 다 필요합니까?누군가이 SQL 명령을 명확히 할 수 있습니까

uName = getRequestString("UserName"); 
uPass = getRequestString("UserPass"); 

sql = "SELECT * FROM Users WHERE Name ='" + uName + "' AND Pass ='" + uPass + "'" 
+2

** 암호를 일반 텍스트 **에 저장하지 마십시오! – SLaks

+2

해당 코드에는 SQL 삽입 취약점이 있습니다 – SLaks

+1

[문자열 연결] (http://en.wikipedia.org/wiki/Concatenation)에 대해 알고 있습니까? 준비된 문을 사용하여 [SQL-Injection] (http://en.wikipedia.org/wiki/SQL_injection)을 피하십시오. – A4L

답변

1

매우 간단합니다. 큰 따옴표가있는 문자열 문장의 시작 부분이 있습니다. 큰 따옴표는 문자열의 시작과 끝 또는 부분을 나타냅니다. 당신이있는 경우, 예를 들어

,

sql ="SELECT * FROM USERS" 

문장은 모든 값을 취; 가지고있는 경우 :

sql = "SELCT * FROM USERS" 
whereSentence = " WHERE id = 1" 
wholeSql = sql + whereSentence 

+ (더하기 기호)는 모든 문자열을 concating. 간단한 따옴표로 문자열에 간단한 따옴표를 추가하고 문장의 다른 부분을 concatening하는 것입니다. 예를 들어

uName의 = '존'과 uPass = 'McDonals'가

sql = "SELECT * FROM Users WHERE Name ='" + uName + "' AND Pass ='" + uPass + "'" 

최종 문장

SELECT * FROM Users WHERE Name = 'John' And Pass = 'McDonals'. 

을해야하는 경우

는에 간단한 방법입니다 이름은 John McDonals가 String으로 말하지만 매개 변수는 요청에 따라 변수입니다.

0

제 인용 (') 마크는 SQL lateron이다. 두 번째 따옴표 (")는 ASP의 문자열 리터럴을 표시합니다.

분석 한 후, 쿼리가 될 것입니다 뭔가 같은 : 당신의 의도가 DBMS에게 문자열을 제공하는 것입니다 때문에 당신의 ' 필요한 이유입니다

SELECT * FROM Users WHERE Name ='name' AND Pass ='password' 

.

2

코드는 다음과 같습니다 쿼리를 작성한다 :

SELECT * FROM Users WHERE Name = 'foo' AND Pass = 'bar' 

그것은 쿼리 문자열에 uNameuPass 변수에서 텍스트에 전달합니다.

이것은 매우 위험합니다. SQL Injection의 문을 열었습니다.

0

이 코드는 SQL 요청에 대한 완전한 문자열을 작성합니다. 아마도 이것은 사용자 이름과 비밀번호가 블록으로 제출되도록 요청하는 웹 페이지에 연결되어있을 것입니다.

는 SQL 문자열이 생성됩니다
uName = "John"; 
uPass = "qwerty"; 

는, SQL 쿼리 문자열 값 주위에 따옴표를 넣어 필요하므로 최종 쿼리는 다음과 같이 표시됩니다

은 uname 및 uPass 문자열

은 이런 식으로 설정됩니다 이 :

sql = "SELECT * FROM Users WHERE Name ='John' AND Pass ='qwerty'" 
0

당신이 썼다면 :

SELECT x from y where y.name = martin 

오류가 발생하는 것입니다. 당신은 너무 같은 문자열을 표시하기 위해 아포스트로피가 필요합니다 누군가가 문자열에 변수를 추가하기 때문에

SELECT x from y where y.name = 'martin' 

지수는, 다음 다른 문자열과 해당 문자열, 아포스트로피의 첫 번째 문자를 추가, 내 martin 후 닫는 아포스트로피입니다 예.

당신이하고있는 것을 알지 못한다면, 나는 문자열에 변수를 추가하지 마십시오. 매개 변수화 된 쿼리를 사용하십시오.

관련 문제