実質ベースで1、
MySQLの文は、ユーザースプライス文字列です
2、例えば
インポートpymysqlの #は、ユーザの入力情報を取得 ユーザ名は= INPUT(" ユーザー名を入力してください:" ) PWD = INPUTは(" あなたのパスワードを入力してください:" ) #データベースに接続 CONN = pymysql.connect( ホスト = ' localhostの' 、 ポート = 3306 、 ユーザ = ' ルート' 、 パスワード = ' @ WSX3edc ' 、 データベース = ' のUserInfo ' 、 文字セット =' UTF8 ' ) #取得カーソル カーソル= conn.cursor() SQL = " 名= '%のS'とパスワード= '%S'がからの情報WHERE SELECT *; "%(ユーザー名、PWD) #は声明のMySQLの実行 印刷を(SQL ) RET = cursor.execute(SQL) IF RET: 印刷(" 成功したログイン!" ) それ以外: 印刷(" ログインに失敗しました!" ) #は、カーソルのクローズ ()cursor.closeを #は、接続のクローズ (はconn.closeを)
インジェクション声明
入力文 ロッセル' または1 = 1#。。 出力SQL文 SELECT * からの情報WHERE名= ' ロッセル' または 1 = 1。。 #'とパスワード= ''; 注:私はpycharmは、MySQL、ノート内のSQLステートメントpycharmを接続し使用しますです:# あなたがpycharmにより、データベースへの接続が、直接pymysqlのコメントを経由して接続されていない場合は、次のようになります。 - SELECT *はから情報名= WHERE 「ロッセル」 または = 1 1 1 = 1が真の文のことはありません #「とパスワード=」 ' ;
pymysqlによって>文字スプライスモジュール - 問題の注入を解決するために3、
インポートpymysqlの #は、ユーザの入力情報を取得 ユーザ名は= INPUT(「ユーザー名を入力してください:」) パスワード = INPUTは(「あなたのパスワードを入力してください:」) #データベースに接続 CONN = pymysql.connect( ホスト = 「localhostの」、 ポート = 3306 、 ユーザ = ' ルート' 、 パスワード = ' @ WSX3edc ' 、 データベース = ' のUserInfo ' 、 文字セット =' UTF8 ' ) #取得カーソル カーソル= conn.cursor() #のSQL文の SQL = ' * WHERE名とパスワードの情報=%S =%S SELECT; ' #pymysqlのことで実行されたSQL文のSQL文スプライシング実行 RETを= カーソル.execute(SQL、[ユーザー名、パスワード]) IF RET: 印刷(" 成功したログイン!" ) それ以外: 印刷(" ログインに失敗しました!" ) #は、カーソルのクローズ (cursor.closeを) #は接続クローズ (はconn.closeを)