Select Insert 문이 있는데 SQL injection에서 코드를 막아야하는지 궁금합니다. 이 코드는 BULK Insert
및 TEMP TABLE
을 사용합니다. 나는 전에 이것을 사용 해본 적이 없으며이 경우에 cfqueryparam
을 사용할 수 있거나 사용해야한다면 익숙하지 않다. 그렇지 않으면 내가이 경우에 적용 할 수있는 다른 것이 있는가? 내가 INSERT/UPDATE
문을 cfloop
를 사용하여 다중를 만들지 않도록 노력하기 때문에 대량를 사용하여 내 문제를 접근 한Insert Insert에서 SQL 삽입을 방지하는 방법?
<cfquery datasource="testDB" name="InsertBulk">
IF OBJECT_ID('tempdb..##TEMP_TBL') IS NOT NULL DROP TABLE ##TEMP_TBL;
CREATE TABLE ##TEMP_TBL (#cols#)
BULK INSERT ##TEMP_TBL
FROM 'D:\myFiles\myTXT.txt'
WITH (
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
)
</cfquery>
<cfquery datasource="testDB" name="InsertUpdate">
INSERT INTO myRecords(
FIRST_NAME,
LAST_NAME,
GENDER,
DOB
)
SELECT
CASE WHEN LEN(LTRIM(RTRIM(FIRST_NAME))) <> 0 OR FIRST_NAME <> 'NULL' THEN FIRST_NAME END,
CASE WHEN LEN(LTRIM(RTRIM(LAST_NAME))) <> 0 OR LAST_NAME <> 'NULL' THEN LAST_NAME END,
CASE WHEN LEN(LTRIM(RTRIM(GENDER))) <> 0 OR GENDER <> 'NULL' THEN GENDER END,
CASE WHEN LEN(LTRIM(RTRIM(BIRTH_DATE))) <> 0 OR BIRTH_DATE <> 'NULL' THEN BIRTH_DATE END
FROM ##TEMP_TBL AS TempInsert
WHERE NOT EXISTS (
SELECT *
FROM myRecords AS Dups
WHERE Dups.userID = TempInsert.user_ID
)
UPDATE Records
SET
Records.FIRST_NAME = CASE WHEN LEN(LTRIM(RTRIM(Temp.FIRST_NAME))) <> 0 OR Temp.FIRST_NAME <> 'NULL' THEN Temp.FIRST_NAME END,
Records.LAST_NAME = CASE WHEN LEN(LTRIM(RTRIM(Temp.LAST_NAME))) <> 0 OR Temp.LAST_NAME <> 'NULL' THEN Temp.LAST_NAME END,
Records.GENDER = CASE WHEN LEN(LTRIM(RTRIM(Temp.GENDER))) <> 0 OR Temp.GENDER <> 'NULL' THEN Temp.GENDER END,
Records.DOB = CASE WHEN LEN(LTRIM(RTRIM(Temp.BIRTH_DATE))) <> 0 OR Temp.BIRTH_DATE <> 'NULL' THEN Temp.BIRTH_DATE END,
FROM myRecords AS Records
INNER JOIN ##TEMP_TBL AS Temp
ON Records.userID = Temp.user_ID
WHERE Records.userID = Temp.user_ID
</cfquery>
: 여기 내 코드입니다.
스택 오버플로에서는 특정 항목이 "ok"인지 묻는 것이 좋지만 개방형 "개선"요청이 더 많은 경우 codereview.stackexchange.com이 더 적합합니다. 이를 염두에두고 질문에서 마지막 몇 문장을 제거했습니다. – Matt
@Matt 당신이 위에 열거 한 두 사람에 대해 들어 보지 못했습니다. 알려 줘서 고마워. –