Hi,

On Sat, Oct 10, 2009 at 10:46 AM, Noufal Ibrahim <nou...@gmail.com> wrote:

> 0 day Django exploit in the wild -
> http://news.ycombinator.com/item?id=872533
> http://www.djangoproject.com/weblog/2009/oct/09/security/
>
> Fixed rather quickly but found rather late. One of the reasons is
> probably because of the comparatively smaller user base. If Django had
> the same number of users as Drupal, I expect a lot more to be visible.
>
> Also, I don't think that merely *using* PHP means that your site is
> less secure. That's a tad too simplistic for my tastes. And I'm also
> willing to bet that if I did have to use PHP, using something like
> Drupal would be a lot more secure than deploying a home brew CMS.
>

  Not exactly. There is some truth in saying that PHP is a less secure
  language overall when compared to Python. The reasons are up from
  design itself. PHP was designed ground up as a language for the web
  which means web development features are built directly into the core
  language as opposed to Python where these are provided by add-on
  modules. It does not take a lot of effort to connect security issues of
  PHP with this fact. This is what makes PHP powerful as well as
  vulnerable.

   For example, this is a very common way of doing a select using PHP.

  $query = "SELECT * FROM products WHERE name=’$productname’";
   mysql_query <http://www.php.net/mysql_query>($query);

  Only that this kind of SQL is very vulnerable to SQL injection attacks
because
  $productname can be replaced with malicious SQL code from outside.

  The correct way to do this would be,

  $query = sprintf <http://www.php.net/sprintf>("SELECT * FROM products
WHERE name=’%s’",
   mysql_real_escape_string <http://www.php.net/mysql_real_escape_string>(
$productname));
   mysql_query <http://www.php.net/mysql_query>($query);

 However, in Python due to some features like multiline strings and
 templating using a dictionary, these kind of issues are more easily
avoided.

 example

 query="""SELECT * from Products WHERE name=%s AND timestamp>=%s"""
 cursor.execute(query % ('burger', '2009-09-10 12:00:00')

 It is not easy to use SQL injection against code like above so the
 default Python string templating is a bit more secure than the one
 provided by PHP.  You don't need to go through the pain of
mysql_escape_string  to escape the SQL params which is the solution
 offered in the PHP world.

 This is just one example. Basically it is a fact that the clean, minimal
  syntax of Python with no "hackish" features does make it a more
 secure language, if not intentional then accidental. Anyway it is good
  news for Python developers.


>
> There was a time when I used to maintain my entire website on my local
> machine as a bunch of text files using Muse for Emacs. Make edits as I
> wanted and then 'publish' the site. Not exactly cutting edge tech. and
> not very flexible but I'm guessing that static HTML pages have better
> security records than Django and Drupal. :)
>
>
>
> --
> ~noufal
> http://nibrahim.net.in
> _______________________________________________
> BangPypers mailing list
> BangPypers@python.org
> http://mail.python.org/mailman/listinfo/bangpypers
>



-- 
--Anand
_______________________________________________
BangPypers mailing list
BangPypers@python.org
http://mail.python.org/mailman/listinfo/bangpypers

Reply via email to