Random security image code

Discussion in 'PHP' started by LuGeLaS, Apr 6, 2007.

  1. #1
    Hello guys

    I wrote some codes for security image.

    <?php
    //Start the session so we can store what the security code actually is
    session_start();
    
    //Send a generated image to the browser
    create_image();
    exit();
    
    function create_image()
    {
        //Let's generate a totally random string using md5
        $md5_hash = md5(rand(0,999)); 
        //We don't need a 32 character long string so we trim it down to 5 
        $security_code = substr($md5_hash, 15, 5); 
    
        //Set the session to store the security code
        $_SESSION["security_code"] = $security_code;
    
        //Set the image width and height
        $width = 75;
        $height = 30; 
    
        //Create the image resource 
        $image = ImageCreate($width, $height);  
    
        //We are making three colors, white, black and gray
        $white = ImageColorAllocate($image, 255, 255, 255);
        $black = ImageColorAllocate($image, 0, 0, 0);
        $grey = ImageColorAllocate($image, 204, 204, 204);
    
        //Make the background black 
        ImageFill($image, 0, 0, $black); 
    
        //Add randomly generated string in white to the image
        ImageString($image, 6, 15, 7, $security_code, $white); 
    
        //Throw in some lines to make it a little bit harder for any bots to break 
    
        imageline($image, 0, 5, $width, 5, $grey); 
        imageline($image, 0, 25, $width, 25, $grey); 
    
     
     
        //Tell the browser what kind of file is come in 
        header("Content-Type: image/jpeg"); 
    
        //Output the newly created image in jpeg format 
        ImageJpeg($image);
       
        //Free up resources
        ImageDestroy($image);
    }
    ?>
    PHP:
    Using :
    
    $scode = $_POST["scode"];
    if ($_COOKIE["security_code"] != $scode) {
    echo "Error!"
    }
    
    PHP:

     
    LuGeLaS, Apr 6, 2007 IP
  2. j4s0n

    j4s0n Guest

    Messages:
    295
    Likes Received:
    7
    Best Answers:
    0
    Trophy Points:
    0
    #2
    you should add a no-cache http header there so the users will get fresh images always.

    :)
     
    j4s0n, Apr 6, 2007 IP
  3. Louis11

    Louis11 Active Member

    Messages:
    783
    Likes Received:
    26
    Best Answers:
    0
    Trophy Points:
    70
    #3
    You should randomize the lines, and the formatting of the text. Otherwise it's really easy to break :)
     
    Louis11, Apr 6, 2007 IP