#(推奨チュートリアル:mysql ステートメントの注入エラーは、一部のデータベースの外部インターフェイスを使用してユーザー データを実際の SQL 言語に挿入し、それによってデータベース、さらにはオペレーティング システムに侵入するという目的を達成することです。攻撃者はこれを使用して、データベース内のデータの読み取り、変更、削除、データベース内のユーザー情報、パスワード、その他の情報の取得、さらには管理者権限の取得を行います。
mysql ビデオ チュートリアル)
SQL インジェクション エラー(SQL インジェクション)SQL インジェクションとは、特定のデータベースの外部インターフェイスを使用してユーザー データを実際のデータベース オペレーティング言語 (SQL) に挿入することで、データベース、さらにはオペレーティング システムに侵入するという目的を達成します。この問題は主に、プログラムがユーザーが入力したデータを厳密にフィルタリングしていないために発生し、その結果、不正なデータベース クエリ ステートメントが実行されます。「MySQL の簡単な説明」
ハザード 攻撃者はこれを使用してデータベース内のデータを読み取り、変更または削除し、データベース内のユーザー情報とパスワードを取得します。データベースなどの情報、さらに深刻なことには、管理者権限を取得します。
//注入式错误
public static void test3(String name,String passward){
Connection connection = null;
Statement st = null;
ResultSet rs = null;
try {
// 加载JDBC 驱动
Class.forName("com.mysql.jdbc.Driver");
// 获得JDBC 连接
String url = "jdbc:mysql://localhost:3306/tulun";
connection = DriverManager.getConnection(url,"root","123456");
//创建一个查询语句
st = connection.createStatement();
//sql语句
String sql = "select * from student where name = '"+ name+"' and passward = '"+passward+"'";
rs = st.executeQuery(sql);
if(rs.next()){
System.out.println("登录成功。");
}else{
System.out.println("登录失败。");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
test3("wjm3' or '1 = 1","151515");
}
## 上記のコードに示すように、ユーザー名は wjm3' または'1 = 1、パスワードは 151515 です。データベースから、そのようなユーザーが存在しないことがわかります。ログイン失敗が表示されるはずですが、または '1 = 1 が no であるため、結果はログインに成功しました。これで、ユーザー名の内容が SQL ステートメントの内容になり、何があっても結果は true となり、パスワードを入力せずにログインできることになります。ここでセキュリティの問題が発生します。
解決策
//注入式错误 public static void test3(String name,String passward){ Connection connection = null; PreparedStatement st = null; ResultSet rs = null; try { // 加载JDBC 驱动 Class.forName("com.mysql.jdbc.Driver"); // 获得JDBC 连接 String url = "jdbc:mysql://localhost:3306/tulun"; connection = DriverManager.getConnection(url,"root","123456"); //创建一个查询语句 String sql1 = "select * from student where name = ? and passward = ?"; st = connection.prepareStatement(sql1); st.setString(1,name); st.setString(2,passward); //sql语句 //String sql = "select * from student where name = '"+ name+"' and passward = '"+passward+"'"; rs = st.executeQuery(); if(rs.next()){ System.out.println("登录成功。"); }else{ System.out.println("登录失败。"); } } catch (Exception e) { e.printStackTrace(); }finally{ try { connection.close(); st.close(); rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void main(String[] args) { test3("wjm3' or '1 = 1","151515"); }
データが有効になるように整理します
以上がmysqlステートメントのインジェクションエラーとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。