Jump to content

Recommended Posts

Posted

If you don't know what SQL injection is, all you need to know about it as it relates to your server's website is that a malicious user could use your own php scripts to modify your server's database or potentially even take full control of your MySQL database.

 

With the following scripts you can have better security..

 

(One word of caution: SQL Injection may still be possible if a user finds a way to pass a "change charset" command to your MySQL database. I can't think of a way to do that through any of these scripts, so they *should* be safe.)

 

Account registration:

 

PHP code:

<?php 
//set host, username and password for MySQL 
$dbhost = "localhost"; 
$dbuser = "YOURMYSQLUSERNAME"; 
$dbpass = "YOURMYSQLPASSWORD"; 
  
//connect to MySQL or return an error 
$conn = mysql_connect("$dbhost", "$dbuser", "$dbpass") 
or die('Could not connect: ' . mysql_error()); 
  
//set database name 
$dbname = "l2jdb"; 
  
//select database or return an error 
$dbselect = mysql_select_db("$dbname")  
or die ('Could not select database'); 
  
//get username and password info from the form, protecting against SQL injection 
$pass = mysql_real_escape_string($_POST["pass"]); 
$confirm = mysql_real_escape_string($_POST["confirm"]); 
$user = mysql_real_escape_string($_POST["name"]); 
  
//validate user input 
if(!preg_match('/^[a-zA-Z0-9]{5,20}$/',$user)) { 
die ('Error: Usernames can only contain alphanumeric characters and must be between 5 and 20 characters in length.'); 
} 
  
if(!preg_match('/^[a-zA-Z0-9]{5,20}$/',$pass)) { 
die ('Error: Passwords can only contain alphanumeric characters and must be between 5 and 20 characters in length.'); 
} 
  
if($pass != $confirm) { 
die ('Error: Passwords do not match.'); 
} 
  
//make sure user doesn't already exist and if it doesn't, add new record to the database 
$result = mysql_query("SELECT login FROM accounts WHERE login='$user'"); 
  
if(mysql_num_rows($result)>0) { 
die ('Error: Username already exists.'); 
}else{ 
mysql_query("INSERT INTO accounts (login, password, access_level) VALUES ('".$_POST['name']."', '".base64_encode(pack('H*', sha1($_POST['pass'])))."', 0)") 
or die ('Error: ' . mysql_error()); 
} 
  
//report successful registration 
echo "Account created successfully."; 
  
//close MySQL connection 
mysql_close(); 
  
?>

 

Save this as acc.php and then use the following html to add the account registration form to your webpage

 

<form action="acc.php" method=post>
UserID: <input type="text" name="name" size=20><br><br>
Password: <input type="password" name="pass" size=20><br><br>
Confirm Password: <input type="password" name="confirm" size=20><br><br>
<input type=submit name="submit" value="Create"></form>

 

The script has built in protection against SQL injection and also forces the user to submit a username and password that are between 5 and 20 characters in length, and limits them to only alphanumeric characters.

 

Password reset scripts are even more subject to SQL injection exploits, so here is a (to the best of my knowledge) secure password reset script.

 

<?php 
  
//set host, username and password for MySQL 
$dbhost = "localhost"; 
$dbuser = "YOURMYSQLUSERNAME"; 
$dbpass = "YOURMYSQLPASSWORD"; 
  
//connect to MySQL or return an error 
$conn = mysql_connect("$dbhost", "$dbuser", "$dbpass") 
or die('Could not connect: ' . mysql_error()); 
  
//set database name 
$dbname = "l2jdb"; 
  
//select database or return an error 
$dbselect = mysql_select_db("$dbname")  
or die ('Could not select database'); 
  
//get username and password info from the form, protecting against SQL injection 
$user = mysql_real_escape_string($_POST["name"]); 
$currentpass = mysql_real_escape_string($_POST["currentpass"]); 
$newpass = mysql_real_escape_string($_POST["newpass"]); 
$confirm = mysql_real_escape_string($_POST["confirm"]); 
  
//username and password should already be valid and newpass and confirm should match or this script will die 
//so just validate the newpass and then check to see if newpass and confirm are the same 
if(!preg_match('/^[a-zA-Z0-9]{5,20}$/',$newpass)) { 
die ('Error: Passwords can only contain alphanumeric characters and must be between 5 and 20 characters in length.'); 
} 
  
if($newpass != $confirm) { 
die ('Error: New passwords do not match.'); 
} 
  
//encrypt the passwords 
$currentpass = base64_encode(pack('H*', sha1($currentpass))); 
$newpass = base64_encode(pack('H*', sha1($newpass))); 
  
//if the user input passed all the checks, make sure the account exists and then update the password 
$result = mysql_query("SELECT login,password FROM accounts WHERE login='$user' AND password='$currentpass'"); 
  
if(mysql_num_rows($result)>0) { 
mysql_query("UPDATE accounts SET password='$newpass' WHERE login='$user' AND password='$currentpass'"); 
echo "Password succesfully updated.";  
}else{ 
die ('Error: Account does not exist or password is incorrect.'); 
} 
  
//close MySQL connection 
mysql_close(); 
  
?>

 

Save the preceding as changepass.php and use the following HTML to insert a change password form into your website.

 

<form action="changepass.php" method=post> UserID:<input type="text" name="name" size=20><br><br> Password: <input type="password" name="currentpass" size=20><br><br> New password: <input type="password" name="newpass" size=20><br><br> Confirm password:<input type="password" name="confirm" size=20><br><br> <input type=submit name="submit" value="Update Password"> 

 

This script uses the same protection as the registration script, and should be safe against all the SQL injection exploits that I can come up with.

 

Server status scripts don't take any input from the user, and thus are not susceptible to SQL injection, but here is a server status script that is tested and working, and as a bonus will use graphics to display your server status.

 

<?php 
  
//set server, port and timeout information 
$server = "localhost"; 
$portg = "7777"; 
$portl = "2106"; 
$timeout = "1"; 

//try to open a connection to the game and login server  
$game = @fsockopen("$server", $portg, $errno, $errstr, $timeout); 
$login = @fsockopen("$server", $portl, $errno, $errstr, $timeout); 
  
//let us know if the servers are up or not  
echo $game ? "<img src=\"gameonline.jpg\">" : "<img src=\"gameoffline.jpg\">"; 
echo $login ? "<img src=\"loginonline.jpg\">" : "<img src=\"loginoffline.jpg\">"; 
  
  
?>

 

All you have to do with this one is create a few graphics and insert the preceding php directly into your HTML whever you want the server status displayed. If the script isn't self-explanatory, the graphics you need to create are gameonline.jpg, gameoffline.jpg, loginonline.jpg and loginoffline.jpg.

 

And last but not least, here is a little script that will display the number of users currently online as a graphic on your webpage.

 

<?php 
  
//set host, username and password for MySQL 
$dbhost = "localhost"; 
$dbuser = "YOURMYSQLUSERNAME"; 
$dbpass = "YOURMYSQLPASSWORD"; 
  
//connect to MySQL or return an error 
$conn = mysql_connect("$dbhost", "$dbuser", "$dbpass") 
or die('Could not connect: ' . mysql_error()); 
  
//set database name 
$dbname = "l2jdb"; 
  
//select database or return an error 
$dbselect = mysql_select_db("$dbname") or die ('Could not select database'); 
  
//select all records from the characters table where that character is currently online 
$chars = mysql_query("SELECT online FROM characters where online='1'") or die ('Query failed: ' . mysql_error()); 
  
//count how many online characters there are 
$rows = mysql_num_rows($chars); 
  
//convert the number of online characters to a string 
$count =(string)$rows; 
  
//convert each digit in the string to a graphic 
for ($i=0; $i < strlen($count); $i++) { echo('<img src="' . $count{$i} . '.jpg">'); }  
  
//close MySQL connection 
mysql_close(); 
  
?>

 

Save this as onlineplayers.php and then insert the following code into your html where you want to display the number of online players.

 

<?php 
include 'onlineplayers.php'; 
?>

 

Now all you need to do is create a graphic for each digit and save them as 0.jpg, 1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg, 6.jpg, 7.jpg, 8.jpg, and 9.jpg. The script will find the number of players currently online and use the graphics you created to diplay the number on your page.

 

 

credits to:threadreaper

  • 1 month later...
Posted

All the PHP and HTML codes are [C O D E D]

 

do it the next time you will release an other guide with scripts.

 

bye.

  • 3 weeks later...
  • 4 months later...
  • 2 months later...
  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • TG Support: https://t.me/buyingproxysup | Channel: https://t.me/buyingproxycom Discord support: #buyingproxy | Server: Join the BuyingProxy Discord Server!  Create your free account here
    • 🚀 IronLock Shield - Closed Beta Update Hello everyone, Since our first announcement, IronLock Shield has received several major protection upgrades. IronLock Shield is a security platform developed specifically for Lineage II Interlude servers, focused on launcher integrity, runtime protection, session security, and anti-bot hardening. Current protection features: ✓ Secure Launcher Architecture ✓ HWID-Based Licensing ✓ Signed Launcher Session System ✓ Gateway Session Verification ✓ Automatic Session Revoke on Critical Detection ✓ Replay Protection with Nonce Validation ✓ Runtime Integrity Verification ✓ Secure Update System Client-side protections: ✓ Anti-Debug Protection ✓ Anti-Dump Protection ✓ DLL Injection Detection ✓ Manual Map Detection ✓ Remote Thread Detection ✓ Runtime Patch Detection ✓ Suspicious Handle Detection ✓ Memory Read / Write Guard ✓ Strict DLL Hash / Allowlist Control ✓ Launcher Self-Protection ✓ Watchdog Protection Bot and automation hardening: ✓ Adrenaline / Memory Reader Hardening ✓ Runtime Decoy Memory Regions ✓ Fake Pointer-Chain / Offset Noise ✓ Per-Build Mutation System ✓ Pointer Scan Disruption ✓ Virtual Keyboard Input Detection ✓ Hookless Virtual Mouse Click Detection ✓ Raw Input Based Mouse Verification Server and gateway security: ✓ Signed Launcher-to-Server Requests ✓ Build ID Binding ✓ HWID Binding ✓ IP / Session Binding ✓ Expired Session Blocking ✓ Revoked Session Blocking ✓ Gateway Runtime Session Checks ✓ Critical Detection Reporting Panel Recent improvements: ✓ Improved protection against memory-reading bots ✓ Added decoy pointer-chain memory traps ✓ Added per-build mutation data ✓ Added stricter process handle policy ✓ Added hookless virtual mouse click detection ✓ Improved watchdog stability to reduce false positives ✓ Improved session revoke logic for critical detections ✓ Updated website and protection feature list IronLock Shield is currently in closed beta. Selected Lineage II Interlude server owners can receive 1 month of free access in exchange for testing and feedback. Website: https://ilshield.com If you are interested, feel free to send me a private message or contact me through Discord. Thank you.
    • Contacts for communication. Telegram https://t.me/a_dvertising_man Telegram short link @a_dvertising_man   Delta Chat https://i.delta.chat/#11D46642C67CF6BDD4BD6430EB8AE99106CC54D7&v=3&i=u1npSLMZpUfcnWi5FGHNBn-1&s=GjBgI7oXKcuCXGl1acvt0tcp&a=p2norrc0e%40nine.testrun.org&n=advertisingman Hello. I participate in "forum deal" in role middleman. Paid services in graphic design,garant service(https link to profile) is provided only from buyer. Please write me in messenger for contact who are you by nationality and in which country you live.   I will not conduct deals with buyers and sellers from Ukraine. I do not cooperate with country Ukraine. If you Ukrainian by nationality or live in Ukraine,ignore this topic. If you other nationality: paid service from garant service buyer pays using own money.   Garant service(https link to profile) provided only from buyer. Buyer provides address guarantor service(https link to profile) or multiple addresses guarantors services. If seller don't like this garant service address(seller may doubt whether he will receive money from this garant service),then buyer offers another address garant service or multiple addresses guarantors services. If neither address seller doesn't like,then buyer is leaving from me.   Buyer deposits full amount to payment details guarantor service, plus my commission(my percent above amount for service in graphic design). In "forum questionnaire" buyer writes: payment details from seller,payment details seller i will send to buyer in advance via messenger.   Paid creation avatar and banner(price depends from complexity work). Paid creation visuals for music releases,for promo art(price depends from complexity work). Original posters using stock images(price depends from complexity work). Design for social media:covers,previews(price depends from complexity work). Other paid services in graphic design(price depends from complexity work).  
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..