C#에서 SQL Server에 대해 단순한 SQL 쿼리를 이스케이프하는 방법
SQL 문자열이 필요한 API를 사용합니다.사용자 입력을 받아 이를 이스케이프한 후 API로 전달합니다.사용자 입력은 매우 간단합니다.열 값을 요구합니다.다음과 같은 경우:
string name = userInput.Value;
그런 다음 SQL 쿼리를 구성합니다.
string sql = string.Format("SELECT * FROM SOME_TABLE WHERE Name = '{0}'",
name.replace("'", "''"));
이 정도면 안전할까요?그렇지 않은 경우 열 값을 안전하게 하는 간단한 라이브러리 함수가 있습니까?
string sql = string.Format("SELECT * FROM SOME_TABLE WHERE Name = '{0}'",
SqlSafeColumnValue(name));
API는 SQL Server를 데이터베이스로 사용합니다.
Sql Parameter를 사용하는 것은 옵션이 아니기 때문에 문자열 리터럴에서는 를 " " (2개의 작은 따옴표이며 하나의 큰 따옴표가 아닙니다)로 바꿉니다.바로 그겁니다.
다운보터 되기: 질문의 첫 줄을 다시 읽습니다.'파라미터 사용'도 직감적인 반응이었다.
편집: 예, SQL 주입 공격에 대해 알고 있습니다.만약 이 견적이 그것들에 취약하다고 생각되면, 제대로 된 반례를 제시해 주세요.아닌 것 같아요.
검색 기능을 위해 동적 sql(총 쏘는 소리가 들림)을 사용했지만, "오레일리"와 같은 성을 가진 사람을 검색할 때마다 끊어집니다.
회피책(해킹)을 찾아냈습니다.
SQL에 스칼라 값 함수를 생성하여 단일 따옴표를 2개의 작은 따옴표로 대체하여 문제를 일으키는 단일 따옴표를 효과적으로 제거했습니다.
"..." "Surname LIKE 'O'Reilly%" "그리고..." "가 됩니다"성은 '%O' 'Reilly%' 그리고..."
이 함수는 필드에 작은 따옴표(first name, last name)가 포함되어 있을 것으로 생각될 때마다 sql 내에서 호출됩니다.
CREATE FUNCTION [dbo].[fnEscapeSingleQuote]
(@StringToCheck NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @Result NVARCHAR(MAX)
SELECT @Result = REPLACE(@StringToCheck, CHAR(39), CHAR(39) + CHAR(39))
RETURN @Result
END
우아하거나 효율적이지는 않지만 위기상황에 처했을 때 사용할 수 있습니다.
단시간에 많은 양의 애드혹 SQL에서 발생하는 문제를 최소의 파손 위험과 최소한의 테스트로 해결할 필요가 있는 경우 파라미터화 대신 를 ""로 대체할 수 있습니다.
SqlCommand 및 Entity Framework 사용exec sp_executesql...
.
그래서 아마도 당신만의 탈출 패턴을 가진 생현에 대한 대안이 있습니다.SqlCommand에서는 기술적으로 매개 변수화된 쿼리를 사용하지만 ADO는 생략합니다.기본 SQL 코드의 순 추상화.
따라서 코드가 SQL 주입을 방지하지는 않지만, 최종 정답은 sp_executesql이지 SqlCommand가 아닙니다.
단, sp_executesql을 사용하는 SQL Injection-proof 스트링을 생성하기 위해서는 특별한 처리 요건이 있을 것입니다.
참조: 동적 SQL Stored Procedure에서 엔티티 프레임워크로 값을 반환하는 방법
심플:
const string sql = "SELECT * FROM SOME_TABLE WHERE Name = @name";
해서 ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ를 요.@name
" " " 이이는: 。
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@name", name);
MSSQL 쿼리의 문자열을 이스케이프할 필요가 있는 경우는, 다음의 순서에 따라 주세요.
System.Security.SecurityElement.Escape(Value)
언급URL : https://stackoverflow.com/questions/2403681/how-to-escape-simple-sql-queries-in-c-sharp-for-sqlserver
'programing' 카테고리의 다른 글
Bash에서 "if" 문의 "and" 연산자 (0) | 2023.04.19 |
---|---|
WPF 싱글인스턴스의 베스트프랙티스 (0) | 2023.04.19 |
Ansible을 사용하여 새 사용자 및 암호 만들기 (0) | 2023.04.19 |
열 F의 날짜가 오늘 날짜와 동일한 경우 조건부 형식을 사용하여 행 강조 표시 (0) | 2023.04.19 |
출력을 파일과 stdout으로 리디렉션하는 방법 (0) | 2023.04.19 |