가능한 중복 :
Can I protect against SQL Injection by escaping single-quote and surrounding user input with single-quotes?이 SQL 쿼리 코드는 사용자 입력에 의해 어떻게 손상/악용 될 수 있습니까?
우리는 위치 매개 변수를 사용하여 쿼리를하지 않는 레거시 응용 프로그램을 가지고 있고, SQL 어디에나있다. 사용자 입력에 아포스트로피가 포함될 수 있기 때문에 모든 문자열 입력을 수동으로 이스케이프 처리해야한다는 결론을 내 렸습니다. 여기
쉽게 소비를위한 C 번호로 변환 (나에 의해 작성되지 않음) 필수 원래의 코드입니다 :private string _Escape(string input)
{
return input.Replace("'", "''");
}
private bool _IsValidLogin(string userName, string password)
{
string sql =
string.Format
(
@"SELECT COUNT(*) FROM UserAccounts
WHERE UserName = '{0}' AND Password = '{1}'",
_Escape(userName),
_Escape(password)
);
// ...
}
이 어떤 방법으로 나눌 수 있습니다처럼이 정말 보인다,하지만 난 손실에 있어요 어떻게 사용자 입력에 의해 악용 될 수 있는지에 관한 것입니다. 사용자 입력이 _IsValidLogin
에 도달 할 때까지 필터링되지 않는다고 가정하고 암호가 일반 텍스트로 저장되는 것을 잊어 버리십시오.
위치 매개 변수를 사용하여 해결할 수있는 해결책은 분명합니다. 그러나이 코드가 안전하지 않은 이유와 방법을 설명하기 위해 탄약이 필요합니다. 시간/$을 고정시켜 할당 할 수 있습니다.
참고 : 나는 이라고 가정하고이라고 가정합니다. 그러나 실제로는 그렇지 않을 수도 있습니다. 나는 SQL 슈퍼 스타가 아니다.
참고 2 :이 질문은 데이터베이스에 무관심한 것으로 표현했지만 특정 엔진에이 코드를 이용할 수 있다면 기고 물을 환영합니다.
값어치가 있으면 여기를 읽어보십시오. http://stackoverflow.com/questions/139199/can-i-protect-against-sql-injection-by-escaping-single-quote-and- 주변 사용자 –
@ 닉 : 고마워, 나는 그걸 보지 못했다. 나는이 질문을 중복으로 끝낼 것이다. –
작성자의 요청이있을 경우 휴무입니다. –