Обсуждение: Serious 7.2 issue (non quiet string truncation)
Hello everybody I am a Ph.D student who just innocently upgraded from 7.1 to 7.2 his home brewed content management system. The update went allright (datawise speaking) but once i fired up the site again i was flooeded with errors.. what happened? simple starting from 7.2 strings are not truncated silently anymore. While this might be standard SQL (i dont know, i am not an expert and , quite honeslty, i dont care) i have a few notes which might be worth considering: IMHO silent truncation is a valuable feature to my sistem and i see no easy way to get around it, how shold i do ? a)replacing Char(x) with "text" type? a security hazard! now every new user can upload up to 8 MB in string for each text field I leave open! b)checking the lenght of EACH FIELD IN EACH QUERY? that means specifically querying the DB for the metadata (performance nightmare) or including metadata about the db in the application (software engineering nightmare). c)leave everything as it is.. maybe get those limits a bit larger and hope that no user ever enters stuff that's too large .. else he'll get nasty errors .. on the other hand that also requires me to handle all query failures directly (put error handles) althought very sound and conservative coding practices (as the postgres code itself , I assume) require this to be done this is really not the case of web scripting and i dont really thing it should be required. To make a long story short Silent truncation wasnt bad ad all.. can we have it back ? (via a switch or something? ) i think a good idea would be to have it "field wise" like create table foo(a char(120) silent_trunc). I do not foresee being able to use postgresql in a non hi-end web development environment otherwise. thanks for the attention Giovanni Tummarello
Why can't you truncate the string yourself.
Take atleast one of these actions:
1. Limit the forms themselves to the length in question:
<input type="text" size="50" />
2. Use trim the string to length in the code (php below):
$string = substr($string, 0, 50);
3. Have the INSERT truncate the string:
INSERT INTO table (col1) VALUES (substring('valuetoinsert', 1, 5));
Any of the above (or all of the above) will accomplish what you
require. I personally suggest both 1 and 2. But 3 can be used if
necessary.
--
Rod Taylor
This message represents the official view of the voices in my head
----- Original Message -----
From: "Giovanni Tummarello" <tummarel@ascu.unian.it>
To: <pgsql-hackers@postgresql.org>
Sent: Monday, February 11, 2002 11:50 AM
Subject: [HACKERS] Serious 7.2 issue (non quiet string truncation)
>
> Hello everybody
>
> I am a Ph.D student who just innocently upgraded from 7.1 to 7.2 his
home
> brewed content management system.
> The update went allright (datawise speaking) but once i fired up the
site
> again i was flooeded with errors.. what happened? simple
> starting from 7.2 strings are not truncated silently anymore.
>
> While this might be standard SQL (i dont know, i am not an expert
and ,
> quite honeslty, i dont care) i have a few notes which might be worth
> considering:
>
> IMHO silent truncation is a valuable feature to my sistem and i see
no
> easy way to get around it, how shold i do ?
>
> a)replacing Char(x) with "text" type? a security hazard! now every
new
> user
> can upload up to 8 MB in string for each text field I leave open!
>
> b)checking the lenght of EACH FIELD IN EACH QUERY? that means
> specifically querying the DB for the metadata (performance
nightmare) or
> including metadata about the db in the application (software
engineering
> nightmare).
>
> c)leave everything as it is.. maybe get those limits a bit larger
and hope
> that no user ever enters stuff that's too large .. else he'll get
nasty
> errors .. on the other hand that also requires me to handle all
query
> failures directly (put error handles) althought very sound and
> conservative coding practices (as the postgres code itself , I
> assume) require this to be done this is really not the case of web
> scripting and i dont really thing it should be required.
>
> To make a long story short
>
> Silent truncation wasnt bad ad all.. can we have it back ? (via a
switch
> or something? ) i think a good idea would be to have it "field wise"
like
> create table foo(a char(120) silent_trunc).
>
> I do not foresee being able to use postgresql in a non hi-end web
> development environment otherwise.
>
> thanks for the attention
> Giovanni Tummarello
>
>
>
>
> ---------------------------(end of
broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
>
Giovanni Tummarello writes: > IMHO silent truncation is a valuable feature to my sistem and i see no > easy way to get around it, how shold i do ? Add a trigger that truncates the value. -- Peter Eisentraut peter_e@gmx.net
On Mon, Feb 18, 2002 at 03:28:15PM -0500, Rod Taylor wrote:
> Why can't you truncate the string yourself.
>
> Take atleast one of these actions:
>
> 1. Limit the forms themselves to the length in question:
> <input type="text" size="50" />
An attacker could circument this by not going through the webform.
While it's doubtful such an attack would cause an exploitable
condition in a language like PHP, it's still better to check
post-submission...
> 2. Use trim the string to length in the code (php below):
> $string = substr($string, 0, 50);
like this.
> 3. Have the INSERT truncate the string:
> INSERT INTO table (col1) VALUES (substring('valuetoinsert', 1, 5));
>
>
> Any of the above (or all of the above) will accomplish what you
> require. I personally suggest both 1 and 2. But 3 can be used if
> necessary.
1 and 2, as you say.
Otherwise some day you convert your code over to C and forget to
truncate, and you may be exploitable.
--
David Terrell | "Science is like sex: sometimes
dbt@meat.net | something useful comes out, but
Nebcorp Prime Minister | that is not the reason we are
http://wwn.nebcorp.com/ | doing it" -- Richard Feynman