Forum Moderators: coopster
After my last post, I had my eyes opened to many issues in my code. I have now redesigned my code so feel free to comment on any security vulnerbilites or suggest better ways of doing things.
The following code is a simple login script...
index.php
---------
<?phpsession_start();
if (isset($_SESSION['logged_in']))
{
if (($_SESSION['logged_in']) == 'Y')
{
redirect();
}
else
{
display_login();
}
}
else
{
if (isset($_POST['submit']))
{
check_database();
}
else
{
display_login();
}
}
// *****************************************************************
function display_login()
{
echo "Please enter your username and password...";
echo "<form action='" . $_SERVER['PHP_SELF'] . "' method='post' enctype='multipart/form-data'>";
echo "<input name='var_userid' type='text'><br>";
echo "<input name='var_pass' value='' type='password'><br>";
echo "<input name='submit' value='Login' type='submit'>";
echo "</form>";
}
// *****************************************************************
function quote_smart($value)
{
// Stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Quote if not integer
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
// *****************************************************************
function check_database()
{
require "db_connect.php";
$query = sprintf("SELECT * FROM users WHERE username='%s' AND password='%s'",
mysql_real_escape_string($_POST['var_userid']),
mysql_real_escape_string($_POST['var_pass']));
$result = mysql_query($query) or die (mysql_error());
if (mysql_num_rows($result) > 0)
{
$_SESSION['logged_in'] = 'Y';
redirect();
}
else
{
$_SESSION['logged_in'] = 'N';
display_login();
echo "INVALID USERNAME/PASSWORD";
}
}
// *****************************************************************
function redirect()
{
if (isset($_REQUEST['page']))
{
if (($_REQUEST['page']) == "") {display_menu();}
if (($_REQUEST['page']) == "secret_link"){require("secret_page.php");}
}
else
{
display_menu();
}
}
// *****************************************************************
function display_menu()
{
echo "You are now logged in." . "<br>";
echo "<a href='?page=secret_link'>Secret Link</a>" . "<br>";
}
?>
db_connect.php
--------------
<?php
$db_conn = mysql_connect("localhost", "username", "password") or die("unable to connect to the database");
mysql_select_db("my_db", $db_conn) or die("unable to select the database");
?>
secret_page.php
---------------
<?php
echo "<h1>This is the secret page</h1>";
?>
secret_page.php
---------------
<?phpif (isset($_SESSION['logged_in']))
{
if (($_SESSION['logged_in'])!= 'Y')
{
echo "You are not authrorised to view this page.";
exit();
}
}
else
{
echo "You are not authrorised to view this page.";
exit();
}
echo "<h1>This is the secret page</h1>";
?>
Change This:
function display_menu()
{
echo "You are now logged in." . "<br>";
echo "<a href='?page=secret_link'>Secret Link</a>" . "<br>";
}
?>
To This:
include "you_cant_open_me.php";
Make you_cant_open_me.php this:
<?
function display_menu()
{
echo "You are now logged in." . "<br>";
echo "<a href='?page=secret_link'>Secret Link</a>" . "<br>";
}
?>
And put this in your .htaccess:
RewriteEngine ON
RewriteRule ^yourdirectory/you_cant_see_me.php - [F]
Then try to open you_cant_open_me.php...
But the main page will still run.
Justin
Edit: Brain Clutter - Moved entire function