File "main.php"
Full Path: /home/analogde/www/Prog/Serrure/main.php
File size: 4.94 KB
MIME-type: text/html
Charset: utf-8
<?php
// This is the authentication page where the user has to give his password
// This password is composed of 8 digits where user will have to give only 4
// To prevent brute force, account will be disabled after 20 wrong tries.
$keypad_layout=array(); //a 24 blobk array with key value inside
$keys=arary(); // a 8 block array with keypad postion inside
$keystar=array(); // a 4 block array with password postion stared
$is_position_stared()=array(); // a 8 block array defining if password digit is stared
/////////////////////// PHP FUNCTIONS PART/////////////////////
function generate_keypad_layout(){
srand ((int) ((double) microtime() * 1234567)); // If needed
for ($i=0;$i<8;$i++){ // For each possible key
while($keys[$i]=rand (0,23)){ // We try to find a free block in a 24 block array
if (!$keypad_layout[$keys[$i]]) {
$keypad_layout[$keys[$i]]=$i;
break;
}
}
}
}
function chose_star_positions(){
for ($i=0;$i<8;$i++){ // place false in is_position_stared
$is_position_stared[$i]=false;
}
srand ((int) ((double) microtime() * 2345678)); // If needed
for ($i=0;$i<4;$i++){ // For each possible key
while($keystar[$i]=rand (1,8)){ // We define which password digits will be stared
if (!$is_position_stared[$keystar[$i]]) {
$is_position_stared[$keystar[$i]]=true;
break;
}
}
}
}
/////////////////////// INIT PART/////////////////////
// We generate a random keypad to prevent mouse capture
generate_keypad_layout();
// We will obfuscate some digits from password so that the password will never be visible completely.
chose_star_positions();
srand ((int) ((double) microtime() * 3456789))
$password_seed=rand(1000,9999);
/////////////////////// SESSION PART/////////////////////
session_start();
// We suppose we have received the user identifier value from a previous POST (may be the identification page)
$_SESSION['user'] = $_POST['user_id'];
$_SESSION['seed'] = $password_seed;
$_SESSION['keys'] = serialize($keys);
$_SESSION['is_position_stared'] = serialize($is_position_stared);
?>
<!-- HTML PART -->
<html>
<body>
<!-- Write whatever you want here -->
<!-- JAVASCRIPT PART -->
<script language="javascript" src="sha-1.js">
// This script willl be download from http://pajhome.org.uk/crypt/md5/sha1.js
</script>
<script>
function clear(){
document.passform.password.value=document.passform.password_cleared.value;
document.passform.code_position.value='';
}
function hash(a_string){
// We call the hex_sha1 function from the sha-1.js script
// With this technique, even a formgraber trojan won't get much information
document.passform.code_position.value=hex_sha1(a_string);
}
function fill(position){
document.passform.code_position.value.=position.'-';
var old_password=document.passform.password.value;
//Next instruction will replace the first space by a star
var new_password=old_password.replace(/ /,'*');
document.passform.password.value=new_password;
}
</script>
Please insert your missing digits below. <br>
<?
/////////////////////// KEYPAD PART/////////////////////
// We place the keypad at a random position to prevent static mouse capture
echo "<span style='position: absolute;top: ".rand (0,700)."px;left: ".rand (0,400)."px;filter:alpha(opacity=25);-moz-opacity:.25;opacity:.25;'>";
echo "<table>";
for ($i=0;$i<4;$i++){ //for each line
echo " <tr>";
for ($j=0;$j<5;$j++){ //for each row
if ($keypad_layout($i*5+$j)){ // if a digit is at this position
echo "<td onmousedown=\"fill(".$keypad_layout($i*5+$j)".))\">".$keypad_layout($i*5+$j)." </td>";
}
else{
echo "<td> </td>";
}
}
echo " </tr>";
}
echo "</table> ";
echo "<form action='verify.php' name='passform' method='POST' >";
// We define the password view when cleared depending on the stars
$password_cleared="";
for ($i=0;$i<7;$i++){
if ($is_position_stared[$i]) $password_cleared.="*-";
else $password_cleared.=" -";
}
if ($is_position_stared[7]) $password_cleared.="*";
else $password_cleared.=" ";
// We fill the password with 4 random stars
echo "<input type='text' size='15' maxlength='15' name='password' value='".$password_cleared."'>";
echo "<input type='hidden' name='password_cleared' value='".$password_cleared."'>";
echo "<input type='hidden' name='code_position' value=''>";
echo "<input type='button' value='OK' onmousedown='hash(document.passform.code_position.value.".$password_seed.");this.submit'>";
echo "<input type='button' value='Clear' onmousedown='clear()'>";
echo "</form>";
echo "</span>";
?>
</body>
</html>