MyBatis提供了以下方法來防止SQL注入:
#{param}
)來代替直接拼接SQL語句中的參數值,通過預編譯的方式將參數值傳遞給數據庫,從而防止注入攻擊。例如,使用參數化查詢的MyBatis語句如下:
<select id="getUser" parameterType="String" resultType="User">
SELECT * FROM users WHERE username = #{username}
</select>
例如,使用動態SQL的MyBatis語句如下:
<select id="getUser" parameterType="User" resultType="User">
SELECT * FROM users
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="email != null">
AND email = #{email}
</if>
</where>
</select>
${expression}
來直接拼接參數值,類似于字符串替換。但是需要注意,使用OGNL表達式語法可能存在SQL注入的風險,所以應該盡量避免直接拼接參數值。例如,使用OGNL表達式語法的MyBatis語句如下:
<select id="getUser" parameterType="String" resultType="User">
SELECT * FROM users WHERE username = '${username}'
</select>
最佳實踐是使用參數化查詢或動態SQL來防止注入攻擊,而避免直接拼接參數值。