でSQLインジェクションを発揮select login_v('[email protected]'' OR 1=1;--','la la la');
を、私は私の方法は、電子メール[email protected]
をユーザに返すべきだと思います。私は間違って何をしていますか?私はplpgsqlがこの機能を持っているPL/pgSQLの
ここではエクササイズのコンセプトを示すためにSQLインジェクションが必要ですが、私はSQLインジェクションとplpgsqlブーブです。 :|
でSQLインジェクションを発揮select login_v('[email protected]'' OR 1=1;--','la la la');
を、私は私の方法は、電子メール[email protected]
をユーザに返すべきだと思います。私は間違って何をしていますか?私はplpgsqlがこの機能を持っているPL/pgSQLの
ここではエクササイズのコンセプトを示すためにSQLインジェクションが必要ですが、私はSQLインジェクションとplpgsqlブーブです。 :|
PL/pgSQLでのSQLクエリは、プリペアドステートメントのように計画されています。限り、値のように渡す限り、SQLインジェクションは一般には不可能です。詳細:EXECUTE
と、実際にSQLインジェクションを実証するための適切な取り扱いパラメータなし
使用の動的SQL。
等が(これはないはそれを行う方法です!):値ひいてはがために悪用されることができないよう
CREATE OR REPLACE FUNCTION login_v(em varchar, passwd varchar)
RETURNS SETOF users AS
$func$
BEGIN
RETURN QUERY EXECUTE
'SELECT *
FROM users
WHERE email = $1
AND encrypted_password = crypt(''' || passwd || ''', encrypted_password)'
USING em;
END
$func$ LANGUAGE plpgsql;
最初の変数em
が正しくUSING
句で渡されますSQLインジェクション
しかし、2番目の変数passwd
は正しくエスケープされずに連結されています。したがって、ユーザー入力をSQLコードに変換することができます。 SQLインジェクション
これは決して使用しないでください。どうしたらいいのかを実証する時を除いて。
クライアントでSQL文字列を不適切に連結すると、同様のいたずらが可能です。