Web Hacking Legacy
SQL Injection
fenec_fox
2025. 5. 31. 21:36
2020. 7. 20. 00:23
데이터베이스에 전송되는 SQL 쿼리문을 조작하여, 데이터를 변조하거나 허가되지 않은 정보에 접근하는 것.
2011년 소니 해킹, 2015년 어나니머스 WTO 해킹 등.
예제 1) 다음 C# 코드는 특정 이름을 찾아내는데 사용된다.
string userName = ctx.getAuthenticatedUserName();
string query = "SELECT * FROM items WHERE owner = "'"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";
sda = new SqlDataAdapter(query, conn);
DataTable dt = new DataTable();
sda.Fill(dt);
여기서 쿼리(query)는 일정한 기본 문자열과 사용자가 입력한 문자열을 연결하여 동적으로 구성되기 때문에 단일 이용 문자가 없는 경우에만 정상적으로 작동한다.
예제 2)
select id, firstname, lastname from authors
firstname = stail , lastname = Pamn.
Query string becomes,
select id, firstname, lastname from authors where forename = 'stail' and surname ='pamn'
SQL을 선언함에 있어 자바로 코딩하기에 안전한 버전.
String firstname = req.getParameter("firstname");
String lastname = req.getParameter("lastname");
String query = "SELECT id, firstname, lastname FROM authors WHERE forename = ? and surname = ?";
PreparedStatement pstmt = connection.prepareStatement( query );
pstmt.setString( 1, firstname );
pstmt.setString( 2, lastname );
try
{
ResultSet results = pstmt.execute( );
}