2010-04-12 5 views
0

현재 값의 매개 변수는 VARCHAR으로 수신되고 그 날짜를 만듭니다. 나는 아래의 방법이 문에서 SQL 주입의 가능성을 중단 할 것을 확인 걸려 :날짜 검사 - SQL 삽입 연결

select CONVERT(datetime, '2010' + '-' + '02' + '-' + '21' + ' ' + '15:11:38.990') 
또 다른 참고 실제 매개 변수가 저장된 프로 시저를 통해 전달되는 것을

가 대응 (4, 2, 2, 10, 12) VARCHAR 년대에 결합 길이있다 위와 같이 예를 들어, PHP - - 그 문은 저장 프로 시저 인 경우 그 문이 언어로 생성되는 경우

+0

"방법"? 어떤 방법? sproc에 값을 문자열이나 숫자로 전달하고 있습니까? –

+0

@Lasse, 나는 더 명확히 설명했다, 나는 첫번째 단락이 그것을 정확하게 설명했다고 생각했다. –

답변

1

. 당신이 당신의 저장 프로 시저에서 다음과 같이 사용할 경우

: 입력 문자열이 짧은 길이로 제한되기 때문에, 당신은 가능성 문제를 가질 수

EXEC ('select CONVERT(datetime, @Year+''-''[email protected]+''-''[email protected]+'' ''+ @Time)') 

,하지만 누가 어떤 해커가 생각하는 것 알고 그 작은 공간에 맞게.

+0

감사합니다. KM, 첫 번째 예제는 내가 한 일과 정확히 같습니다. –

0

, 어쨌든

SQL 주입으로 고생하지 않습니다 그럼 그냥 당신이 방식에 문자열을 탈출하기 ('mysql'대신 '\'또는 mssql의 경우 ')를 사용하여 주입 공격을 피하십시오. 대상 데이터 형식 datetime에만 유효 날짜 문자열을받을 수 있기 때문에

select CONVERT(datetime, @Year + '-' + @Month + '-' + @Day+ ' ' + @Time) 

은 다음, 잘해야한다 : 저장 프로 시저 내에서,이 같은 문을 사용 넣으면

+0

만약 당신이 값을 전달하고 연결하면, 주사로 맞을 수 있습니다. 나는 단지 크기 제한과'convert' 사이에서 안전해야한다고 생각합니다. –

+0

어떻게 값을 연결하여 주사 할 수 있습니까? 일단 값이 SQL 내부에 있으면 안전합니다. SQL 삽입은 SQL 문을 생성 한 다음 실행하면 발생합니다. sql 내부에서 발생하는 유일한 시간은'sp_executesql'을 주입 공격을 감시 할 필요가있는 곳에서 호출하는 경우입니다. 크기 제약 조건은 좋고 변환을 통해 데이터를 검사하므로 절대 괜찮습니다. – oedo

+0

코드 조각은 PHP 나 그와 비슷한 것으로, 이것을 처리하는 유일한 방법은 그것을하지 않는 것입니다. 당신 자신의 답을 보더라도 문자 그대로를 구현한다면 당신은 안전하지 않을 것입니다. "... - \ '..."가 포함 된 문자열을 생각해보십시오. 당신의 축약 된 예에서'with 또 다른 \,하지만 그것은 단지 "... - \\ '"로 끝날 것입니다. "는 따옴표가 아닌 백 슬래시를 이스케이프합니다. SQL 인젝션을하지 않는 것이 가장 좋은 방법 인 이유는 사이트를 공격하려는 사람들보다 SQL 인젝션을 더 잘하는 것이 어렵 기 때문입니다. –