<br><br><div class="gmail_quote">On Wed, Sep 23, 2009 at 1:01 PM, Chris Frey <span dir="ltr"><<a href="mailto:cdfrey@foursquare.net">cdfrey@foursquare.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">On Wed, Sep 23, 2009 at 10:13:51AM -0400, Khalid Baheyeldin wrote:<br>
> On Tue, Sep 22, 2009 at 6:42 PM, Chris Frey <<a href="mailto:cdfrey@foursquare.net">cdfrey@foursquare.net</a>> wrote:<br>
</div><div class="im">> > Make programming badly hard.<br>
> ><br>
><br>
> I don't think that this should be a goal, not is it effective. Making it<br>
> very hard, will make it very expensive too because the pool of qualified<br>
> developers will be less.<br>
><br>
> I think that education is the key here to mitigate all this, not making<br>
> programming hard. Another route is open source, were a pool of people look<br>
> at the product, not just one or two people who may be not very qualified.<br>
<br>
</div>Slightly rephrased for clarity:  Make bad programming hard.<br>
Good programming shouldn't be hard, but it is often harder than bad<br>
programming.<br></blockquote><div><br>Re-phrased like this, I fully agree.<br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">
> One thing we did in Drupal, is have our own db abstraction layer that<br>
> when used correctly, would escape all SQL queries and prevent SQL injection.<br>
><br>
> See here<br>
> <a href="http://drupal.org/writing-secure-code" target="_blank">http://drupal.org/writing-secure-code</a><br>
> And here<br>
> <a href="http://drupal.org/node/101496" target="_blank">http://drupal.org/node/101496</a><br>
><br>
> So users are urged to use the Drupal API, and not the PHP/MySQL API<br>
> to access the database. If they do that, they are protected from themselves.<br>
><br>
> That is not fool proof though, they can bypass that layer and go to the PHP<br>
> layer, but with some education, most people eventually use the Drupal API.<br>
<br>
</div>Yes, that's the kind of thing I'm talking about, thanks.  For a programmer<br>
who knows SQL but not PHP, mysql_exec() is easier, but "bad".  If that<br>
function didn't exist, then learning the good way would come first.<br>
<br>
It would be better if the API above didn't need a warning at the top<br>
of the web page asking users not to concat strings for their SQL, though.<br></blockquote><div><br>Actually, the "Drupal way" is less work than the "directly call MySQL way".<br>For example, you don't have to know what the database name, user name<br>
and password are, nor do you have to connect to the database explicitly. <br>It is all done for you under the hood.<br><br>That does not stop someone from using the API in an unsafe way, e.g.<br><br>This is the advocated and safe way, using placeholders that are escaped by<br>
the API:<br><br>db_query("SELECT * from {node} WHERE nid = %d", $_GET['nid']);<br><br>A PHP-only programmer would do it the way he always did by concatenating things:<br><br>db_query("SELECT * from {node} WHERE nid = " . $_GET['nid']);<br>

<br>Which is unsafe.<br><br>So, education is the key here, learn the API and you will be safer.<br>Also, if your code is contributed and in the CVS repository, more eyes will<br>see it and scrutinize it, and hopefully discover bugs.<br>
<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
For example, the ODBC API has two ways to access the database.  One is<br>
string based, which is easy to get working, and the other is API based,<br>
using column binding, which is much safer, much faster, and much harder<br>
to use the first time.<br>
<br>
ODBC (and PHP too) could be made much safer by removing the simple string<br>
method, and adding exceptions if any data was found in the raw SQL<br>
statements.  This would force users of the API to use the column binding<br>
method, making SQL data access safe.  And since the API is hard to use,<br>
it would likely encourage helper APIs to make column binding easier.<br>
<br>
Eventually we'd have the best of both worlds: safe and easy.<br></blockquote><div><br>Yes, agreed. And PHP is slowly moving in that direction. For example, register<br>globals and all that were enabled by default, now they are not.<br>
<br>The issue is backward compatibility, applications will break, so it is done slowly. <br>PHP 5 is vastly superior to PHP 4 on many aspects, and security is one of them.<br>But it will take a couple of versions before it "gets there".<br>
</div></div><br>-- <br>Khalid M. Baheyeldin<br><a href="http://2bits.com">2bits.com</a>, Inc.<br><a href="http://2bits.com">http://2bits.com</a><br>Drupal optimization, development, customization and consulting.<br>Simplicity is prerequisite for reliability. --  Edsger W.Dijkstra<br>
Simplicity is the ultimate sophistication. --   Leonardo da Vinci<br>