Re: Old memory contents appearing in files created by dba_open

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Feb 07, 2003 at 05:38:04PM -0500, Len Sorensen wrote:
> I was playing around with figuring out why dba_open creates an ndbm
> database when run in stand alone mode (as requested) but creates a db2
> database when run as an apache module.  This is in php 4.2.3 on a Debian
> 3.0 system.  I haven't tried with 4.3 yet.  I am not sure if this is a
> bug somewhere, or a configuration problem, but it does seem odd.
> 
> Something I noticed while playing with this, is that all the files
> created by dba_open contain a lot of other old memory contents from the
> apache/php process when created, some of which perhaps shouldn't be
> dumped into files being saved.
> 
> My guess is that when the db lib used by dba_open creates a file, it
> does a malloc of a certain size, and uses that as the basis for the
> file, and it doesn't clear this memory (after all why should it care
> what is in it before it creates it's db structure).  I assume that when
> php's garbage collector frees memory, it does not clear it, and hence
> script code, sql query contents, etc are still present in the freed
> memory, which may be allocated by another malloc later in the same
> thread without being cleared (since it was already used by that process
> there is no point in the OS clearing it, assuming the OS is ever
> responsible for clearing memory).  As a result, content of SQL queries
> sent to postgres from a previous request on that web server, may end up
> written to the db2 or ndbm or gdbm file (whichever is used), when you
> create a new file with dba_open, meaning potentially private information
> could end up in a file you may end up giving to someone else later.
> 
> So does anyone have any idea who is to blame for this problem?  Is it
> PHP?  libc?  The OS?  Apache?  The DB library in use?  I am certainly
> not sure, but given I don't know of a way for the php user to make php
> wipe it's memory, I can't think of any way to prevent the data from
> ending up in the file, short of changing the lib*db* code to zero the
> memory it allocs before writing the file.  Somehow that seems like the
> wrong place to attack it.  Calling bzero every time you call free in php
> also seems like the wrong approach.
> 
> Opinions and possible fixes are welcome.
> 
> Telling me another mailing list that is better suited for the question
> would be fine too given this could happen with other libraries included
> with php.

I also occoured to me, that any user that can create php scripts and run
them, could use dba_open, to dump a chunk of memory to a file, and then
send that file using readfile, or the like to the user viewing the page,
even if that file isn't in a location apache itself would serve.  What if
that memory dump contained passwords used on other parts of the site?
Does this concern anyone else?

Len Sorensen

-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux