Posted by: Shofiur Rahman

Posted on: July 11, 2012 4:13 pm

-

Every day hackers are discovering new exploits and hacking techniques. We can defend some categories of attacks in our PHP script.

Abusing register_globals

It is a setting in php.ini that controls the auto population of variables with the same name as form elements or cookies. If register_globals set to on then it may bring a disaster for your website.

Since PHP 4.2.0, the default value for register_globals is off. But often web hosts will re-enable register_globals to provide compatibility with older scripts. We can get clear concept of register_globals on or off with the following example.

Suppose username is a form element. With register_globals ‘off’, the only way to get the value of this form element using $_POST or $_GET array, depending on form action method. On the other hand, when register_globals is ‘on’, the username field value is accessible using $_POST, $_GET and $username as well.

If you are not able to disable register_globals in php.ini, you can turn it off use an .htaccess file.

php_flag register_globals off

SQL Injection Attacks

SQL injection attacks are simply the inclusion of malicious SQL statements in the place of what should normally be inoffensive data. SQL injection preys on a lack of input scrubbing and data validation.

SQL injection is fairly avoidable with an insignificant preparation and thorough coding practices. If magic_quotes_gpc is enabled, PHP automatically escapes any escape characters (e.g. apostrophes). Unluckily, this activities is applied to all GET, POST and Cookie variables in spite of whether they are going to used in a SQL statement or not. Most of the time it can be annoying. To make sure the data is escaped only when we need it to be, we can turn off magic_quotes_gpc in php.ini, and use addslashes() on all data that is being passed to MySQL. The addslashes() function will automatically escape any unsafe characters so our input will not choke MySQL.

Cross-Site Scripting

Cross-Site Scripting abbreviated XSS, cross-site scripting is the abuse of unfiltered dynamic output, where the invader has the skill to add or change the page’s generated markup. Most commonly, this means the addition of a small bit of JavaScript to the output of a page, which then does something ominous, such as trick another user into revealing their login credentials or credit card information, or possibly divulging cookie or session information for immediate account compromise.

Posted by: Shofiur Rahman

Posted on: June 27, 2012 4:32 pm

-

To authenticate a user includes the following steps:

  • Identifying visitors
  • Implementing access control
  • Authentication

Identifying Visitors

The web is fairly anonymous medium, but it is often useful to know who is visiting your site to focus on right business area. You are able to get little about the visitors due to users privacy. With a little work server can find out quite lot about users computers, networks, browsers, etc.  From visitor’s IP address you are able to know visitor’s geographic location.

Implementing access control

Simple access control is not difficult to implement. A simple PHP script is shown below.

<?php
//create short names for variables

$name = $HTTP_POST_VARS['name'];

$password = $HTTP_POST_VARS['password'];

if(empty($name) || empty($password)){

//Visitor needs to enter a name and passwor.

?>

<strong>Please Log In</strong>

<form method=”post” action=”login.php”>
<label>User Name: </label> <input type=”text” name=”name” />
<label>Password:</label> <input type=”password” name=”password” />
<input type=”submit” value=”Log In” />

</form>

<?php

}

else if($name==’user’&& $password==’pass’){

//login successful

}

else {
//login failed
}

?>

Encrypting passwords

To secure the access control you need to implement encryption algorithm on the user login. The PHP function crypt () provides a one-way cryptographic hash function. The prototype for this function is

String crypt (string str [, string salt])

Basic Authentication in PHP

There are some built-in authentication facilities in to HTTP. Scripts or web servers can request authentication from a web browser. The web browser is then responsible for displaying a dialog box or similar device to get required information from the user.

PHP scripts are generally cross-platform, but using basic authentication relies on environment variables set by the server.  A sample of HTTP basic authentication using PHP is shown below.

<?php
// if we are using IIS, we need to set $PHP_AUTH_USER and $PHP_AUTH_PW

if(substr($SERVER_SOFTWARE, 0, 9) == ‘Microsoft’ && !isset($PHP_AUTH_USER) && !isset($PHP_AUTH_PW) && substr($HTTP_AUTHORIZATION, 0, 6) == ‘Basic’)
{

list($PHP_AUTH_USER, $PHP_AUTH_PW) = explode(‘:’, base64_decode(substr($HTTP_AUTHORIZATION, 6)));

}

//Replace this if statement with a database query or similar

if($PHP_AUTH_USER!=’user’ || $PHP_AUTH_PW != ‘pass’)

{

// Visitor has not yet given details, or their
// name and password combination are not correct

header(‘WWW-Authenticate: Basic realm=”Realm-Name”‘);
if(substr($SERVER_SOFTWARE, 0, 9) == ‘Microsoft’)
header(‘Status: 401 Unauthorized’);

else
header(‘HTTP/1.0 401 Unauthorized’);

echo ‘You are not authorized to view this resource.’;

}

else {

// visitor provided correct details.

}

?>

Posted by: Peter Andrease

Posted on: June 8, 2012 8:03 am

-
  1. Locate the FTP details of the website and download the entire contents of the current site through an FTP Program, e.g. Filezilla. This should include the wp-admin, wp-content, wp-includes folders and all loose files in the root.
  2. Access the database of the site via the current hosts CPanel or phpMyAdmin and save a copy of the entire database. The Hosts CPanel may have an option to simply backup the database or if using phpMyAdmin go to the ‘Export’ tab, select ‘Quick’ export method in Format ‘SQL’ and just hit ‘GO’ to save to your computer.
  3. Now you have the full contents of your wordpress site, so on the new hosting you will need to create a new database. Again this would need to be done in your new hosts CPanel or hosting panel. When you create your new database make a note of the database name, username and password set.
  4. Once the database is created, you will need to add your downloaded database file. If using phpMyAdmin, select ‘Import’, browse for your database file and hit ‘GO’.
  5. Your database will now be in place, if you are transferring to a different domain name you will need to change the name in two locations on the database. So while in phpMyAdmin go to the wp_options table and the first row item should be ‘siteurl’, click ‘Edit’ and change this to your new domain name. Now go to Page 2 and near the top there will be a ‘home’ row with the site name in again, change this also.
  6. With your database ready you can now get the site in place. Go to your downloaded site and first open the wp-config.phpfile in the root and change the following in red to your new database settings:

    define(‘DB_NAME’, DATABASE NAME);

    define(‘DB_USER’, USERNAME);

    define(‘DB_PASSWORD’, PASSWORD);

    define(‘DB_HOST’, ‘localhost’);

    The MySQL hostname should always be ‘localhost’, unless your new hosting has a specific host type.

  7. Now access the FTP of your new site and remove or backup any files currently there, then upload your entire site to the root.
  8. The website will now be in place so if you need to change nameservers or IPS Tag then you can do this now. Once any transfers are complete, your site will show in the new location, so test the site and subpages in a browser and you should be all done! If any problems occur during this process then contact the hosting company who would be able to provide specific details.

Posted by: SEO Positive

Posted on: November 29, 2010 11:55 am

-

All developers have to transfer sites at some point, if you don’t I envy you. It seems that site transfers always have teething issues with the difference in server builds, operating systems having different compilations of PHP and the rest.

And worst of all, different hosts limitations…

But to transfer a site you need to make a simple list of things that need to be done in order for it to work.

  • Get all files, including hidden files (many a time I’ve been caught up on the .htaccess on a mac being hidden and a site riddled with 404 errors…)
  • Get all database details of the new server
  • Update all calls to databases
  • Use Dream Weaver (for the only things its any good for) to search and replace across the site for the old URL and change it to the new one, and the same with database details)
  • Make sure image, stylesheet, javascript and any other call is base root not an absolute URL (unless externally hosted)
  • Upload everything, including creating the new databases
  • Test everything, fix bugs and teething issues

If you can do all of the above your site will transfer easy peasy.

Posted by: SEO Positive

Posted on: July 7, 2010 8:23 am

-

While a lot of php programmers still use standard MySQL no problem, I still do, there is MySQLi Which stands for “MySQL improved” and its simply a driver for PHP with more functionality and safer than using your standard MySQL code.

See below for a pretty bog standard PHP class to connect to MySQL

class mysqlCon
{
             private static $connection;

             private function __construct($server, $username, $password, $database)
             {
                          if(!mysql_connect($server,$username,$password))
                                       throw new RunTimeException('Could not connect to MySQL server. MySQL said: '.mysql_error());
                          if(!mysql_select_db($database))
                                       throw new RunTimeException('Could not connect to MySQL database. MySQL said: '.mysql_error());
                          self::$connection = true;
                          return $this;
             }
}
$connection = new mysqlCon('localhost', 'username', 'password', 'database');

Which looks, to most PHP programmers pretty standard. But see below for the MySQLi version of this operation

class mysqliCon
{
             private static $connection;

             private function __construct($server, $username, $password, $database)
             {
                          self::$connection = new mysqli($server, $username, $password, $database);
                          if(self::$connection->error)
                                       throw new RunTimeException('MySQLi said no. It also said: '.self::$connection->error);
                          return $this;
             }
}

Which, as you can see is only half the size, its half the code for twice as much functionality and security.

I recommend a movement to MySQLi because it really is great, there’s not a flaw to it its much easier to use and much easier to learn (And the errors are friendlier)

Posted by: SEO Positive

Posted on: May 12, 2010 8:46 am

-

Today we are going to expand more on PHP Variables and introduce the define() function as well as touch base with MySQL And getting you connected to a database.

The requirements for todays tutorial are:

  • PHP Server with PHP 5+
  • MySQL Access with all privilages
  • Testing platform (Virtual Server, PHP Hosting)
  • Text authoring software to edit your files

As usual all code can be downloaded via the link at the bottom of the post.

MySQL Code

//resource one
$connect1 = mysql_connect('localhost','test','test');
mysql_select_db('test', $connect1);

//resource 2
$connect2 = mysql('localhost','test2','test2');
mysql_select_db('test2',$connect2);

//simple query using resource #1
mysql_query("select * from `test`", $connect1);

//simple query using resource #2
mysql_query("select * from `test2`", $connect2);

PHP Function

function feedMe($food)
{
	if($food == 'cookies')
	{
		return 'Yummy thank you very much for the cookie';
	}
	else
	{
		return "Yuk! I don't like {$food}, I want cookies.";
	}
}
//feed me apples
echo feedMe('pears');
//will output Yuk! I don't like apples, I want cookies.

//feed me cookies
echo feedMe('cookies');
//will output Yummy thank you very much for the cookie

Download Zipped Source

Tomorrow we will look at handling user input data using PHP and XHTML using POST and GET methods

Authors
Categories
Archives
Blogroll