SQL 인젝션( SQLi )

Mar 12 2023
안녕하세요. 시간을 내어 글을 읽어주셔서 감사합니다. 감사합니다! 오늘의 콘텐츠는 'SQL 인젝션'에 대한 이해에 관한 것입니다. 콘텐츠는 전적으로 제 개인적인 경험과 지식, App Sec 및 소프트웨어 개발 분야의 놀라운 사람들과의 상호 작용, 그리고 많은 독서와 보안 코딩을 기반으로 합니다. 이 기사에서는 기본 사항에서 내용을 단순화하려고 노력할 것입니다.
함께 배우자 | SQL 인젝션

안녕,

시간을 내어 글을 읽어주셔서 감사합니다. 감사합니다!

오늘의 내용은 'SQL 인젝션'에 대한 이해입니다.

콘텐츠는 완전히 내 개인적인 경험과 지식, App Sec 및 소프트웨어 개발 분야의 놀라운 사람들과의 상호 작용, 많은 독서 및 보안 코딩을 기반으로 합니다.

이 기사에서는 기본 사항에서 내용을 단순화하려고 노력할 것입니다. 나는 독자들이 자신의 생각과 논평을 가질 것이라고 확신하며, 어떤 피드백과 토론도 환영합니다.

견해/의견/의견은 나의 과거/현재 고용주가 아닌 나의 것입니다.

함께 배워봅시다!

SQL 인젝션이란?

악의적인 행위자가 데이터베이스 내의 데이터에 액세스하고 데이터를 조작하기 위해 악의적인 SQL 코드를 취약한 입력 필드에 삽입하는 애플리케이션 보안 공격 유형입니다. SQLi는 공격자가 데이터베이스의 데이터를 보고/수정/삭제할 수 있도록 합니다.

SQLi를 수정하는 방법?

SQL 쿼리와 입력 값을 연결하지 마십시오.

항상 입력 유효성 검사를 수행하고( 개인적인 의견으로는 실제로 많은 악성 서명을 방지함 ) SQLi를 수정하기 위한 기본 전략 중 하나를 따릅니다.

  1. 매개 변수화된 쿼리: 입력 값을 매개 변수로 SQL 문에 전달합니다. 이것은 매개변수화된 쿼리를 사용하여 얻을 수 있습니다. 이렇게 하면 악의적인 입력이 SQL 코드로 실행되는 것을 방지할 수 있습니다.
  2. 저장 프로시저: 코드 내에 SQL SQL 쿼리를 포함하지 않고 저장 프로시저를 통해 DB로 이동하는 것이 훨씬 좋습니다.

매개변수화된 쿼리:

아래 코드 샘플에서 이름과 패스는 'setString()'을 통해 sql 문에 매개 변수로 전달됩니다. PreparedStatement의 메소드입니다.

....
// simple basic example
// assume name and pass are obtained from some input
// conn is the connection
String sqlStatement = "SELECT * FROM userdetails WHERE name = ? AND pass = ?";
PreparedStatement stmt = conn.prepareStatement(sqlStatement);
stmt.setString(1, name);
stmt.setString(2, pass);
ResultSet rs = stmt.executeQuery();
// carry on with your logic
....

아래 코드 샘플에서 'name'과 'location'은 'setString()'을 통해 저장 프로시저 'userDetails'에 매개변수로 전달됩니다. CallableStatement의 메소드입니다. 출력은 'registerOutParameter'를 활용하는 'output' 매개변수를 통해 수신됩니다. CallableStatement의 또 다른 메소드입니다.

....
// simple basic example
// Assume name and location are obtained from some input
// conn is the connection
CallableStatement stmt = conn.prepareCall("{ call userdetails(?,?,?) }");
stmt.setString(1, name);
stmt.setString(2, location);
stmt.registerOutParameter(3, java.sql.Types.INTEGER);
stmt.execute();
int output = stmt.getInt(3);
// carry on with your logic...
....

의견/피드백은 항상 콘텐츠를 개선하고 더 잘하기 위해 노력하고 있으므로 항상 환영합니다.

소스 작성: 여러 온라인 웹사이트, Open AI, DALL-E, 개발자 및 NLP 도구의 콘텐츠를 다른 말로 표현한 App Sec에서의 내 경험.

감사합니다!

LinkedIn 에 저를 추가하세요