SQL 사용자와 함께 ProFTPd를 사용하고 재고 SQL 구성을 사용하려고 합니다.
현재 이상한 문자열 이스케이프 문제가 있지만 SELECT가 아닌 "tally" 테이블에 대한 INSERT에서만 작동합니다.
내 세션은
SQLNamedQuery get-quota-tally SELECT "name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,files_xfer_used FROM ftp_quota_tally WHERE name = '%{0}' AND quota_type = '%{1}'"
SQLNamedQuery insert-quota-tally FREEFORM "INSERT INTO ftp_quota_tally (name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,files_xfer_used) VALUES (%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7})"
SQL 쿼리 로그는 SELECT에 대해 다음을 보여줍니다.
2020-09-15 03:53:37,317 mod_sql/4.5[19831]: query "SELECT name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,files_xfer_used FROM ftp_quota_tally WHERE name = 'USERNAME_HERE' AND quota_type = 'user'"
괜찮은데 표시가 나네요
2020-09-15 03:53:37,321 mod_sql/4.5[19831]: query "INSERT INTO ftp_quota_tally (name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,files_xfer_used) VALUES (\'USERNAME_HERE\', \'user\', 0.000000, 0.000000, 0.000000, 0, 0, 0)"
ProFTPd는 ${0} 및 ${1} 를 이스케이프하기 위해 \'
.
노트:
(1) 나는 이 SQL 쿼리를 사용해 보았습니다.
SQLNamedQuery insert-quota-tally FREEFORM "INSERT INTO ftp_quota_tally (name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,files_xfer_used) VALUES ('%{0}', '%{1}', %{2}, %{3}, %{4}, %{5}, %{6}, %{7})"
이로 인해 더 많은 사람들이 도망치게 된다.
2020-09-15 04:15:58,490 mod_sql/4.5[20643]: query "INSERT INTO ftp_quota_tally (name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,files_xfer_used) VALUES ('\'USERNAME_HERE\'', '\'user\'', 0.000000, 0.000000, 0.000000, 0, 0, 0)"
(2) FREEFORM이 아닌 방법도 시도해 보았습니다.
INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftp_quota_tally
이것은 또한 내 FREEFORM 방식과 마찬가지로 이상한 탈출을 초래합니다.
어떤 아이디어가 있나요?
답변1
버전 1.3.7부터 이 문제의 원인은 ProFTPD의 버그로 추적되었습니다.이슈 #1149.