Shared publicly  - 
Half a year ago I installed +ownCloud

Right now, I'm reading the source. Specifically owncloud/lib/db.php. I'd better not done that.

owncloud can use MDB2. That's a wrapper for database access and database modeling, written in PHP, with backends for many databases.

owncloud can also use PDO. That's a wrapper for database access, native to PHP, written in C, without modeling support, with backends for many databases.

db.php is a wrapper wrapping the two wrappers.

Of course, only for operation. For installation it requires MDB2 at all times, because PDO does not support modeling.

What does that mean?

In db.php are wonderful things such as createDbFromStructure().

That's reading an XML file with a schema definition and should create a schema in the SQL dialect of the target database. Because that's... well, dunno. 'more portable' it isn't.

Because: After we read the XML file, we're doing str_replace on it, because it's XML.

                $content = file_get_contents( $file );
                $content = str_replace( '*dbname*', $CONFIG_DBNAME, $content );
                $content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
                if( $CONFIG_DBTYPE === 'pgsql' || $CONFIG_DBTYPE === 'oci' ) {
                         $content = str_replace( '<default>0000-00-00 00:00:00</default>',
                                '<default>CURRENT_TIMESTAMP</default>', $content );
                file_put_contents( $file2, $content );
                $definition = self::$schema->parseDatabaseDefinitionFile( $file2 );
                unlink( $file2 );

I can't make that up.

I'll continue to read. This is better than twilight zone.

Well, after I locked access to my owncloud/ directory from the Internet, that is. Like watching Twilight Zone: First lock the door.

EDIT: Continued in

updateDbFromStructure() - the same broken XML massaging here again, duplicated. Only that the data source for dbname is not $CONFIG_DBNAME, but  $previousSchema['name'] ($previousSchema being generated from getDefinitionFromDatabase($CONFIG_DBTABLEPREFIX) though!), while  dbprefix is from $CONFIG_DBTABLEPREFIX like before.

So the code is subtly different, but does the same.

EDIT: continued in
and in
Kristian Köhntopp's profile photoHolger Dyroff's profile photoStefan Pfab's profile photoChristian Bricart's profile photo
mdb2 gibts noch?

"Ein 17! Nach all den Jahren gibt es noch einen 17!"
Oh man. file_get_contents und str_replace auf ne XML.
Mir fehlen Worte.
Das XML-File sollte man doch binary einlesen, oder irre ich mich? Nicht das es noch encoding-Probleme gibt!
+Kristian Köhntopp Do you just have a knack for finding maximally pessimized code?

Reading this and your OpenStack post this morning has convinced me I need to to turn off the computer and go hiking!
+Clarissa Meyer <xsl:for-each select="/ns1:html/ns1:body/ns1:div/ns1:div/ns1:div/ns1:div/ns1:div/ns1:div/ns1:div/ns1:div/ns1:div/ns1:table/ns1:tr"> <- DAS ist Gruselig. Das da oben ist einer der mitgründe warum PHP als Frickelsprache abgetan wird. WEIL ES GEHT.
Mein schoenster Moment war seinerzeit ein (von dritter Hand) in PHP geschriebener XML Parser mit XSL Funktionalitaet. Das resultierende Dokument war in keinem Fall valide ... Aber es geht, man kann wunderbar XML einlesen und mit XSLT bearbeiten (so man XSLT scripte versteht ;-)
". str_repeat('?,', count($input)-1).'? ' // Is there a prettier alternative?" :(
/me war mal in einem "war eigentlich für Oracle geschrieben, muss jetzt aber auch fix für MySQL portiert werden" Teilprojekt, das sah dann ähnlich aus wie adapterpgsql.php, nur in die andere Richtung ... das ging dann aber auch nur an genau einen Kunden raus der wusste was er da bekam und bereit war damit zu leben ... und nicht an die ganze große weite Welt ...
Mal fuer die Nicht-Nerds, die mit dem Gedanken spielen eine owncloud aufzusetzen und keine Ahnung haben worum 's genau geht:
Isses empfehlenswert/sicher oder nicht? :-l
Als ich jung war und das Geld brauchte, habe ich solchen Quatsch in Code gesehen, dessen Ausführbares die verantwortlichen Firmen dann für viel Geld verkauft haben. Optimisten sollten das hier also als den Vorteil von Open Source verstehen: Wir dürfen sehen, ob und wie gepfuscht wird. Pessimisten, ja, die gehen jetzt am besten raus in den Garten. Es wird nicht schöner.
+Clemens Gleich spricht wahre Worte. Es wird überall nur mit Wasser gekocht und unter der Haube wirds fast überall schnell gruselig.

+BO B Das ist IMHO eine reine Glaubensfrage. Kommerzielle Cloud-Anbieter fallen ebenfalls regelmäßig unangenehm auf. Nur weil man den Source "nicht sieht" ist das System nicht sicherer. Hier hilft nur (wie immer) Backup, Backup, Backup und ggf. Verschlüsselung.
Ich habe in der Vergangenheit ja auch so einiges verbrochen (ich war jung und brauchte den Code), aber ich habe sowas wenigstens nicht noch verbreitet.
Sicher ist sowas furchbar ... aber anstatt darüber die Hände über dem Kopf zusammenzuschlagen und lästern, könnten sich ein paar Meister ja auch hinsetzen, das aufräumen und zurückgeben. Das ist auch eine Facette von OpenSource.
Leute, das ist OpenSource, soll heissen, genau das (jemand beschäftigt sich mit dem Code) macht das Produkt nach und nach wirklich gut, aber nur, wenn nicht nur gemeckert, sondern entsprechen geändert und somit unterstüzt wird. Selbst im Kernel findest du gruselige Sachen, solange bis halt jemand das fixt...
+Volker Randt korrekt. Wäre die Zeit stattdessen in den fix geflossen anstatt sich darüber auszulassen ...
Anyone who actually looked into the ownCloud development noticed that this code was replaced several month ago with Doctrine. The new code will be released as ownCloud 6 soon.
I also agree with +Volker Randt That patches and pull requests are always welcome. But complaining about other peoples code is of course more fun.
This is what currently is deployed, from yesterdays build. If you installed owncloud on your box as a reaction to the NSA stuff, code like this above is on your server.

I stand by my claim that 'host your own' is not a solution (see also for a longer text about the very same topic), because you are likely to be not competent to do this. I know that I should have read this code half a year ago before actually installing it. Had I, I would not have let this onto my box.

server:/srv/www/htdocs/owncloud/lib # rpm -qi owncloud
Name        : owncloud
Version     : 5.0.10
Release     : 10.1
Architecture: noarch
Install Date: Tue 03 Sep 2013 03:16:53 PM CEST
Group       : Productivity/Networking/Web/Utilities
Size        : 47985880
License     : AGPL-3.0 and MIT
Signature   : DSA/SHA1, Mon 02 Sep 2013 04:07:56 PM CEST, Key ID 977c43a8ba684223
Source RPM  : owncloud-5.0.10-10.1.src.rpm
Build Date  : Mon 02 Sep 2013 04:06:52 PM CEST
Build Host  : cloud120
Relocations : (not relocatable)
Vendor      : obs://
URL         :
Summary     : ownCloud Server - Private file sync and share server
Description :
ownCloud Server provides you a private file sync and share
cloud. Host this server to easily sync business or private documents
across all your devices, and share those documents with other users of
your ownCloud server on their devices.

ownCloud - Your Cloud, Your Data, Your Way!
Distribution: isv:ownCloud:community / openSUSE_12.3_standard
Yes I did.

I did also see Python, Ruby or Go code that was like this. Attributing this to PHP completely misses the point.
Where's the security leak / reason not to use this code? I see the code is ugly, unnecessary complicated, slow, and might be troublesome with the wrong XML files. But as long as it's only executed with delivered files, it should be about as good/bad as fixed SQL statements in the code, shouldn't it? And if someone's able to hack the XML files, he'd have access to the PHP code as well.
However, I don't know PHP too well, so maybe I missed something?
I did not spend the time to actually construct an exploit, but I still believe that there is sufficient latent fragility that is is possible to break this.

If you think that this is not a problem because it does not break right now then you are showing exactly the mindset that was active when this thing has been created.

Just because you haven't hit the ground yet doesn't mean jumping out of planes without parachutes is a good idea ("Look mom, I'm flying!" "Look boss, release in production!") 
This thread is a great example how open source allows improvements and adds security by providing everybody the ability to review and improve in a transparent way. While future +ownCloud versions will be better, the available one is the file sync and share solution to use today.
And yes, any help is appreciated!
Add a comment...