์ธ๋ถ์์ ์ ๋ ฅ๋ ๊ฐ์ด ์ฟผ๋ฆฌ๋ฌธ์ ์ธ์๊ฐ๊ณผ ์ฟผ๋ฆฌ ๋ช ๋ น์ด์ ์ฐ๊ฒฐ๋๋ ๋ฌธ์์ด๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์ ์๋์์ ๋ฒ์ด๋ ๋ฌธ์์ด ์ ๋ฌํด ์ฟผ๋ฆฌ๋ฌธ ์๋ฏธ ์๊ณก ๋๋ ๊ตฌ์กฐ ๋ณ๊ฒฝํด ์์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ช ๋ น์ด ์ํ ๊ฐ๋ฅ
-
์ธ๋ถ ์ ๋ ฅ์์ ์ํํ ๋ฌธ์๋ ์๋ ๋ฒ์ด๋ ์ ๋ ฅ ์ ๊ฑฐํ๋ ์ฝ๋ ํ๋ก๊ทธ๋จ ๋ด์ ์ถ๊ฐ
-
mybatis Data Map ํ์ผ์ ์ธ์๋ฅผ ๋ฐ๋ ์ฟผ๋ฆฌ ๋ช ๋ น์ด ์ ์ํ ๋ ๋ฌธ์์ด ์ฝ์ธ ์ธ์(
$...$ ) ์ฌ์ฉ X
-> #<์ธ์์ด๋ฆ># ํํ์ ์ฟผ๋ฆฌ๋ฌธ ์ฌ์ฉ
mybatis Data Map์์ ์ฌ์ฉํ๋ ์ง์๋ฌธ ์ค์ ํ์ผ(XML)
์์ ํ์ง ์์ ์ฝ๋(java) :
์ ์๋ ์ฟผ๋ฆฌ๋ฌธ ์ค delStudent
๋ช
๋ น์ด ์ ์ธ์์ ์ฟผ๋ฆฌ๋ฌธ ์ฝ์
์ธ์ ์ค $name$
๋ก ์ ๋ฌ๋๋ ๋ฌธ์์ด ๊ทธ๋๋ก ์ฐ๊ฒฐํด ์ง์๋ฌธ ์์ฑ
name
์ ๊ฐ์ผ๋ก ' OR 'x'='x'
์ ๋ฌ์ (DELETE STUDENTS WHERE NUM = #num# and Name = '' OR 'x'='x')
ํด๋ฆฌ๋ฌธ ์ํ๋์ด ํ
์ด๋ธ์ ๋ชจ๋ ์์ ์ญ์ ํจ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Student">
<resultMap id="StudentResult" class="Student">
<result column="ID" property="id" />
<result column="NAME" property="name" />
</resultMap>
<select id="listStudents" resultMap="StudentResult">
SELECT NUM, NAME
FROM STUDENTS
ORDER BY NUM
</select>
<select id="nameStudent" parameterClass="Integer" resultClass="Student">
SELECT NUM, NAME
FROM STUDENTS
WHERE NUM = #num#
</select>
<!-- dynamic SQL ์ฌ์ฉ -->
<delete id="delStudent" parameterClass="Student">
DELETE STUDENTS
WHERE NUM = #num# AND Name = '$name$'
</delete>
</sqlMap>
์์ ํ ์ฝ๋(java) :
Name
์ธ์๋ฅผ #name#
ํํ๋ก ๋ฐ๋๋ก ์์
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Student">
<resultMap id="StudentResult" class="Student">
<result column="ID" property="id" />
<result column="NAME" property="name" />
</resultMap>
<select id="listStudents" resultMap="StudentResult">
SELECT NUM, NAME
FROM STUDENTS
ORDER BY NUM
</select>
<select id="nameStudent" parameterClass="Integer" resultClass="Student">
SELECT NUM, NAME
FROM STUDENTS
WHERE NUM = #num#
</select>
<!-- static SQL ์ฌ์ฉ -->
<delete id="delStudent" parameterClass="Student">
DELETE STUDENTS
WHERE NUM = #num# AND Name = '#name#'
</delete>
</sqlMap>
์ฌ์ฉ์๊ฐ ์์ ํ๊ณ ์๋ item์ ๋ํ ์ ๋ณด ์ป์ด ์ค๊ณ ์์
์์ ํ์ง ์์ ์ฝ๋(java) :
$itemName$
์ฌ์ฉํด ๋์ ์ง์๋ฌธ ์์ฑ
itemname
์ name'; DROP items; --
๋ก ์ฃผ๋ฉด ์ฟผ๋ฆฌ๋ฌธ ์ํ ๊ฒฐ๊ณผ๋ SELECT * FROM items WHERE owner=``user name`` AND itemname= ``item name``;
๊ณผ DROP items;
์คํ ๊ฒฐ๊ณผ ๋์ผ
-> DB์ items ํ
์ด๋ธ ์ ๋ณด ์ญ์ ๋จ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="UserItem">
...
<select id="getItems" parameterClass="MyClass" resultClass="items">
SELECT * FROM items WHERE owner = #userName# AND itemname = '$itemName$'
</select>
...
</sqlMap>
์์ ํ ์ฝ๋(java) :
$itemName$
๋์ #itemName#
์ฌ์ฉํด ์ ์ ์ง์๋ฌธ ์์ฑ
itemname
์ name'; DROP items; -
ํ๋ฉด itemname
์ ์ด๋ฆ์ด name'; DROP items; -
์ธ ํญ๋ชฉ ์ฐพ๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ๋ฌธ ์๋์์ ๋ฒ์ด๋ ๋์ ๋ฐฉ์ง ๊ฐ๋ฅ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="UserItem">
...
<select id="getItems" parameterClass="MyClass" resultClass="items">
SELECT * FROM items WHERE owner = #userName# AND itemname = '#itemName#'
</select>
...
</sqlMap>