RE: Preventing SQL Injection/ Cross Site Scripting

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

 



No.  That is a common mistake amongst the uninformed.  Addslashes
doesn't take into effect character encodings, while
mysql_real_escape_string does.  Please take a look at this article:
http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-st
ring

-Logan 

-----Original Message-----
From: Weber Sites [mailto:webersites@xxxxxxxxx] On Behalf Of WeberSites
LTD
Sent: Monday, April 23, 2007 10:49 AM
To: Buesching, Logan J; 'Dotan Cohen'; 'php php'
Subject: RE:  Preventing SQL Injection/ Cross Site Scripting

I'm trying to understand from the examples why anyone 
that has get_magic_quotes_gpc() returning true would
need to use stripslashes() and then mysql_real_escape_string().

wouldn't that just add slashes to the same places?

berber

-----Original Message-----
From: Buesching, Logan J [mailto:ljbuesch@xxxxxxxxxx] 
Sent: Monday, April 23, 2007 2:35 AM
To: Dotan Cohen; php php
Subject: RE:  Preventing SQL Injection/ Cross Site Scripting

There are many good resources out there, and one of my favorites for
this
type of information is from Chris Shiflett.
http://shiflett.org/articles/sql-injection
http://shiflett.org/articles/foiling-cross-site-attacks
http://shiflett.org/blog/2007/mar/allowing-html-and-preventing-xss


Those are a few articles on the subject, maybe some reader comments have
more good links.

Also, just as a best-practice, you usually don't want to reassign things
into the super globals.  Also to note, your filtering may be a bit too
aggressive, and not all-inclusive at the same time.  Too aggressive
because
if I want to talk about java in a comment, it will filter out every time
I
say java.  Too lax because you are forgetting all of the HTML onclick,
onhover etc... that don't need to have a <script> tag in them to be
executed.  Any of the preg_replace's with an = in them is redundant
because
you have already filtered out all of the ='s, but also note that you can
have multiple spaces between href and =.  You are banking that they will
have 0 or 1.

If available, you can look into PHP 5.2 which added some filter
functions
(albeit I myself haven't checked them out).  You can also look into
OWASP's
PHP project, http://www.owasp.org/index.php/Category:OWASP_PHP_Project.
That is a pretty good resource in secure coding best-practices.

-Logan

-----Original Message-----
From: Dotan Cohen [mailto:dotancohen@xxxxxxxxx]
Sent: Friday, April 20, 2007 9:08 PM
To: php php
Subject:  Preventing SQL Injection/ Cross Site Scripting

I've got a comments form that I'd like to harden against SQL Injection /
XSS
attacks. The data is stored in UTF-8 in a mysql database. I currently
parse
the data as such:

$_POST["commentform"]=str_replace ("'", "''", $_POST["commentform"]);
  //    q->qq
$_POST["commentform"]=str_replace ("--", "", $_POST["commentform"]);
 //    -- -> x
$_POST["commentform"]=str_replace (";", "", $_POST["commentform"]);
//    ; -> x
$_POST["commentform"]=str_replace ("=", "''", $_POST["commentform"]);
  //    = -> x
$_POST["commentform"]=preg_replace ("/java/i", "''",
$_POST["commentform"]);
$_POST["commentform"]=preg_replace ("/script/i", "''",
$_POST["commentform"]); $_POST["commentform"]=preg_replace ("/src=/i",
"''",
$_POST["commentform"]); $_POST["commentform"]=preg_replace ("/src =/i",
"''", $_POST["commentform"]); $_POST["commentform"]=preg_replace
("/iframe/i", "''", $_POST["commentform"]);
$_POST["commentform"]=preg_replace ("/rel=/i", "''",
$_POST["commentform"]);
$_POST["commentform"]=preg_replace ("/rel =/i", "''",
$_POST["commentform"]); $_POST["commentform"]=preg_replace ("/href=/i",
"''", $_POST["commentform"]); $_POST["commentform"]=preg_replace ("/href
=/i", "''", $_POST["commentform"]); $_POST["commentform"]=preg_replace
("//i", "''", $_POST["commentform"]);
$_POST["commentform"]=htmlspecialchars( mysql_real_escape_string
($_POST["commentform"]) );

The first statement doubles up quotes, it's a bit difficult to see in
the
code.

After seeing this:
http://ha.ckers.org/xss.html
and another similar one for SQL injection, I'm worried that my filters
are
not enough. What do the pro php programers out there use?

Thanks in advance.

Dotan Cohen

http://lyricslist.com/
http://what-is-what.com/

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

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



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux