에서 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.
등 (이 가이 그것을 할 수없는 방법입니다!) :
이 첫 번째 변수em
가 제대로 따라서
값으로
USING
절을 통과하고
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;
을 위해 악용 될 수 없습니다 SQL 주입.
그러나 두 번째 변수 passwd
은 올바르게 이스케이프 처리하지 않으면 잘못 연결됩니다. 따라서 사용자 입력을 SQL 코드로 변환 할 수 있습니다. SQL 주입.
절대 사용하지 마세요.하지 않는 방법을 시연 할 때를 제외하고.
클라이언트에서 SQL 문자열을 부적절하게 연결하면 비슷한 장난이 발생할 수 있습니다.