Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 09-14-2007, 06:59 PM
tam2000k2 tam2000k2 is offline
 
Join Date: Sep 2007
Posts: 4
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Using md5hash function for logging in

I posted the following on vBulletin.com and they suggested to post it here:

Hi Everyone,

I am somewhat new to vBulletin and Moveable Type technologies, but I have been involved with the web since 1994. So, I'm pretty good with catching on, but I need your assistance.

I hope someone can help me with my understanding of this function.

I am one of the administrators for forums.tvgasm.com and I also maintain tvgasm.com. As mentioned above, I am new to both types of web technologies.

In trying to use one of the tables of the database, namely the table tvgvbuser within the database forumdb, which holds usernames and passwords, among other information, but the passwords are encrypted.

Since we were having issues with typekey authentication systems and we have over 100,000 readers, we grew tired of the issues associated with that login system. Naturally we thought, we already have a log in system and our readers have accounts within our forums section, why not use what we have and, at the same time, not loose this huge audience.

I understand that the "md5" system of encrypting a word is being used for the passwords, but I do not know how to compare the password that the user types in, from the password in the table.

I have tried the following AJAX code:
Code:
var user = document.getElementById('navbar_username').value;
var pass = document.getElementById('navbar_password').value;
var vb_login_md5password = document.getElementById('vb_login_md5password').value;
var vb_login_md5password_utf = document.getElementById('vb_login_md5password_utf').value;
var s = document.getElementById('s').value;

// Open PHP script for requests -- phpscript2 is a pre-defined php file

http.open('post', phpscript2);
http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http.onreadystatechange = handleResponsePost;
http.send('username='+ user +'&password='+ md5hash(pass,vb_login_md5password, vb_login_md5password_utf, 0));
The username and password are sent to a php file which then executes a simple SQL string:

Code:
$query = mysql_query("SELECT * FROM tvgvbuser WHERE username='". $username ."' AND password='". $password ."'");
My php file simply determines if it was successful or not, followed by echoing a statement to that affect.

But I receive an error from the JavaScript Console of my browser that "s" is not defined.

I know that since I am not calling these functions from within the forums section and, instead from within tvgasm.com, that this would probably not work.

I do realize that there has been a great deal of effort in creating an entire system and that I am only trying to use a small portion of that system, outside it's natural environment.

So, my ultimate question is -- is there a simple way to query this table using the natural password that the user types in and there by allowing us to continue to use the resource that we have available.

Here is a link to an example of what my code is attempting to do -- http://beta.tvgasm.com/shows/login3.htm

When you enter a registered username and click within the password text field, it automatically checks to see if this username is legit and responds accordingly.

However, sending an SQL string for the password is another issue and that's what I need assistance with your expertise.

Thanks in advance,
Tarik (Kronus)
Reply With Quote
  #2  
Old 09-15-2007, 04:20 AM
Dismounted's Avatar
Dismounted Dismounted is offline
 
Join Date: Jun 2005
Location: Melbourne, Australia
Posts: 15,047
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Passwords are encrypted in the database like so:
PHP Code:
$password md5(md5($password) . $salt); 
Where $password is the password string and $salt is the field "salt" in the database.
Reply With Quote
  #3  
Old 09-15-2007, 03:50 PM
tam2000k2 tam2000k2 is offline
 
Join Date: Sep 2007
Posts: 4
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

That worked perfectly. I had to modify my code to retrieve $salt first, so for anyone else who needs it.

Code:
 // connect to mysql 
 $mysql = mysql_connect('localhost','adminusername','adminpassword'); 
 
 // fail on database errors 
 if (!$mysql) 
 {     die('false|Could not connect to MySQL'); } 
 
	 // connect to the database 
	 mysql_select_db('forumdb', $mysql); 
	 
$username = $_POST['username']; 
$password = $_POST['password']; 

$query = mysql_query("SELECT salt FROM tvgvbuser WHERE username='". $username ."'");
$row = mysql_fetch_array($query);

$salt = $row["salt"];

$password = md5(md5($password) . $salt);


$query = mysql_query("SELECT * FROM tvgvbuser WHERE username='". $username ."' AND password='". $password ."'"); 
$result = mysql_num_rows($query); 
$row = mysql_fetch_array($query); 

if ($result == 1) 
{ 
    $_SESSION["user"] = $row["username"]; 
     
    echo 'Welcome, '. $row["username"].' . Please fill out our spam verification and post your comments.

<p>
	  <label for="comment-email">Email Address:</label>
	  <input id="comment-email" name="email" size="30" />
   </p>
</div>

<p>
   <label for="comment-url">URL:</label>
   <input id="comment-url" name="url" size="30" />
</p>
<p>
   <label for="comment-bake-cookie"><input type="checkbox"
	  id="comment-bake-cookie" name="bakecookie" onClick="if (!this.checked) forgetMe(document.comments_form)" value="1" />
	  Remember personal info?</label>
</p>
</div>

<p id="comments-open-text">
<label for="comment-text">Comments: </label>
<textarea id="comment-text" name="text" rows="15" cols="50"></textarea>
</p>
<div id="comments-open-footer" class="comments-open-footer">


<input type="submit" accesskey="v" name="preview" id="comment-preview" value="Preview" />
<input type="submit" accesskey="s" name="post" id="comment-post" value="Post" />
	'; 
} 
else 
{ 
    echo 'Wrong combination of User Name and Password. Did you forget your Password? <a href="http://forums.tvgasm.com/login.php?do=lostpw" target="_blank"> Click here to retrieve it.</a>'; 
} 

?>
Thank you very much for your assistance. :-)
Reply With Quote
  #4  
Old 09-15-2007, 04:48 PM
Opserty Opserty is offline
 
Join Date: Apr 2007
Posts: 4,103
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Clean your variables:

PHP Code:
$username mysql_real_escape_string($_POST['username']); 
Also add LIMIT 1 to the end of your query and fetch the password and username from the DB instead of querying twice. So you have something like
[sql]SELECT `username`,`password`, `salt` FROM tvgvbuser WHERE username='". $username ."' LIMIT 1[/sql]
The you can remove this:
PHP Code:
$query mysql_query("SELECT * FROM tvgvbuser WHERE username='"$username ."' AND password='"$password ."'"); 
$result mysql_num_rows($query); 
$row mysql_fetch_array($query); 
And instead use something like:

PHP Code:
// I'm not a hundred percent sure if this works 
// You can maybe use:
// if(mysql_num_row($query) == 0) instead
if(!mysql_num_rows($query))
{
    
// Wrong username but we won't tell them that
        
echo 'Wrong combination of User Name and Password. Did you forget your Password? <a href="http://forums.tvgasm.com/login.php?do=lostpw" target="_blank"> Click here to retrieve it.</a>'
}
else
{
    
$hashedpassword md5(md5($password) . $salt);
    if(
$hashedpassword != $row['password'])
    {
        
// Wrong username but we won't tell them that
            
echo 'Wrong combination of User Name and Password. Did you forget your Password? <a href="http://forums.tvgasm.com/login.php?do=lostpw" target="_blank"> Click here to retrieve it.</a>'
    }
    else
    {
        
// Do you session stuff here
    
}

There might be some parse errors...I'm using notepad
Reply With Quote
  #5  
Old 09-15-2007, 05:14 PM
tam2000k2 tam2000k2 is offline
 
Join Date: Sep 2007
Posts: 4
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks for the feedback. Keep it coming :-)

Have a good one,
Tarik (kronus)
Reply With Quote
  #6  
Old 09-16-2007, 07:41 AM
Dismounted's Avatar
Dismounted Dismounted is offline
 
Join Date: Jun 2005
Location: Melbourne, Australia
Posts: 15,047
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

There's no need to do two queries. Just query once for the password and salt. Then hash the inputted password and match it up with the password fetched from the database.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 02:04 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.05136 seconds
  • Memory Usage 2,225KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (3)bbcode_code
  • (4)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (6)post_thanks_box
  • (6)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (6)post_thanks_postbit_info
  • (6)postbit
  • (6)postbit_onlinestatus
  • (6)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete