0
나는 기존 응용 프로그램에이 코드를 발견Doctrine 1은 SQL 인젝션을 허용합니까?
$salt = $this->generateSalt();
$new_pass_update = Doctrine_Query::create()
->update('User')
->set('password', '"'. $this->hash($newPass, $salt) .'"')
->set('salt', "sleep(10)") // $salt) <- I replaced this
->where('email = ?', array($mail))
->getDql();
die($new_pass_update);
나는이 DQL가 출력으로 생성 된보고 충격을 받았다 : 모든
UPDATE User SET password = "3dbe00a167653a1aaee01d93e77e730e"
salt = sleep(10) WHERE email = ?
첫째, 나는 인용 부호를 볼 것으로 예상하지 않았다 암호 값 주변. 나는 교리 나를 위해 그렇게 할 것이라고 thougt, 그래서 나는 그들없이 두 번째 인수를 시도하지만이 DQL가 출력으로 생성 된보고 충격을 받았다 : 나는 변경하는 경우
UPDATE User SET password = "3dbe00a167653a1aaee01d93e77e730e"
salt = sleep(10) WHERE email = ?
-> getDql()에 대한 -> 실행()는 정확히 실행 된 쿼리이고 db는 10 초 동안 휴면합니다.
왜 doctrine이 이와 같이 작동합니까? 검보는 지적
세 번째 매개 변수로 값을 전달해야한다고 생각합니다. 'set ('salt ','? ','sleep (10) ')'. – Gumbo
와우, 좋은 캐치. 대답을 게시 할 수 있도록 받아 들일 수 있습니까? –