display first page of pdf as image in c# : Change font pdf fillable form control Library system azure asp.net wpf console 05-welling-php-mysql-web39-part86

16
Implementing Authentication with
PHP and MySQL
I
NTHISCHAPTER
,
WEDISCUSSHOWTO IMPLEMENT
various PHP and MySQL tech-
niques for authenticating users.
Key topics covered in this chapter include
n
Identifying visitors
n
Implementing access control
n
Using basic authentication
n
Using basic authentication in PHP
n
Using Apache’s 
.htaccess
basic authentication
n
Using basic authentication with IIS
n
Using 
mod_auth_mysql
authentication
n
Creating your own custom authentication
Identifying Visitors
The Web is a fairly anonymous medium,but it is often useful to know who is visiting
your site.Fortunately for visitors’privacy,you can find out very little about them with-
out their assistance.With a little work,servers can find out quite a lot about the comput-
ers and networks that connect to them,however.A web browser usually identifies itself,
telling the server what browser,browser version,and operating system a user is running.
You can often determine what resolution and color depth visitors’screens are set to and
how large their web browser windows are by using JavaScript.
Change font pdf fillable form - C# PDF Field Edit Library: insert, delete, update pdf form field in C#.net, ASP.NET, MVC, Ajax, WPF
Online C# Tutorial to Insert, Delete and Update Fields in PDF Document
create a fillable pdf form; convert word to editable pdf form
Change font pdf fillable form - VB.NET PDF Field Edit library: insert, delete, update pdf form field in vb.net, ASP.NET, MVC, Ajax, WPF
How to Insert, Delete and Update Fields in PDF Document with VB.NET Demo Code
change font size pdf fillable form; add text field to pdf acrobat
358
Chapter 16 6 Implementing Authentication with PHP and MySQL
Each computer connected to the Internet has a unique IP address.From a visitor’s 
IP address,you might be able to deduce a little about her.You can find out who owns 
an IP and sometimes make a reasonable guess as to a visitor’s geographic location.
Some addresses are more useful than others.Generally,people with permanent Internet
connections have a permanent address.Customers dialing into an ISP usually get only
the temporary use of one of the ISP’s addresses.The next time you see that address,it
might be used by a different computer,and the next time you see that visitor,she will
likely be using a different IP address.IP addresses are not as useful for identifying people
as they might at first glance seem.
Fortunately for web users,none of the information that their browsers give out 
identifies them.If you want to know a visitor’s name or other details,you will have to
ask her.
Many websites providecompelling reasons to get users to provide their details.The
New York Timesnewspaper (http://www.nytimes.com) provides its content free,but only
to people willing to provide details such as name,sex,and total household income.Nerd
news and discussion site Slashdot (http://www.slashdot.org) allows registered users to
participate in discussions under a nickname and customize the interface they see.Most
e-commerce sites record their customers’details when they make their first order.This
means that a customer is not required to type her details every time.
Having asked for and received information from your visitor,you need a way to asso-
ciate the information with the same user the next time she visits.If you are willing to
make the assumption that only one person visits your site from a particular account on a
particular machine and that each visitor uses only one machine,you could store a cookie
on the user’s machine to identify the user.
This arrangement is certainly not true for all users.Many people share a computer,
and many people use more than one computer.At least some of the time,you need to
ask a visitor who she is again.In addition to asking who a user is,you also need to ask
her to provide some level of proof that she is who she claims to be.
As discussed inChapter 15,“E-commerce Security Issues,”asking a user to prove her
identity is called authentication.The usual method of authentication used on websites is
asking visitors to provide a unique login name and a password.Authentication is usually
used to allow or disallow access to particular pages or resources,but can be optional,or
used for other purposes such as personalization.
Implementing Access Control
Simple access control is not difficult to implement.Thecode shown in Listing 16.1
delivers one of three possible outputs.If the file is loaded without parameters,it will dis-
play an HTML form requesting a username and password.This type of form is shown in
Figure 16.1.
C# PDF Text Box Edit Library: add, delete, update PDF text box in
framework. Able to create a fillable and editable text box to PDF document in C#.NET class. Support to change font color in PDF text box.
change font size in pdf fillable form; acrobat create pdf form
VB.NET Create PDF from Word Library to convert docx, doc to PDF in
Change Word hyperlink to PDF hyperlink and bookmark. VB.NET Demo Code for Converting Word to PDF. Add necessary references: RasterEdge.Imaging.Font.dll.
adding a text field to a pdf; add fields to pdf form
359
Implementing Access Control
Figure 16.2 2 When users enter incorrect details,you need to give them an
error message.On a real site,you might want to give a somewhat friendlier
message.
Figure 16.1 1 This HTML form requests that visitors enter a username and
password for access.
If the parameters are present but not correct,it will display an error message.A sample
error message is shown in Figure 16.2.
VB.NET Create PDF from Excel Library to convert xlsx, xls to PDF
Change Excel hyperlink to PDF hyperlink and bookmark. VB.NET Demo Code for Converting Excel to PDF. Add necessary references: RasterEdge.Imaging.Font.dll.
add form fields to pdf online; add image to pdf form
C# Create PDF from Word Library to convert docx, doc to PDF in C#.
Change Word hyperlink to PDF hyperlink and bookmark. C#.NET Sample Code: Convert Word to PDF in C#.NET Project. RasterEdge.Imaging.Font.dll.
chrome save pdf with fields; change font in pdf form
360
Chapter 16 6 Implementing Authentication with PHP and MySQL
If these parameters are present and correct,it will display the secret content.The sample
test content is shown in Figure 16.3.
Figure 16.3 3 When provided with correct details,the script displays content.
The code to create the functionality shown in Figures 16.1,16.2,and 16.3 is shown in
Listing 16.1.
Listing 16.1 1 secret.php—PHP and HTML to Provide a Simple Authentication
Mechanism
<?php
//create short names for variables
@ $name = $_POST[‘name’];
@ $password = $_POST[‘password’];
if(empty($name)||empty($password))
{
//Visitor needs to enter a name and password
?>
<h1>Please Log In</h1>
This page is secret.
<form method=”post” action=”secret.php”>
<table border=”1”>
<tr>
<th> Username </th>
<td> <input type=”text” ” name=”name”> </td>
</tr>
C# Create PDF from OpenOffice to convert odt, odp files to PDF in
An advanced .NET control to change ODT, ODS, ODP forms to fillable C#.NET Project DLLs: Conversion from OpenOffice to PDF in C#.NET. RasterEdge.Imaging.Font.dll.
pdf form maker; change font size in fillable pdf form
VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to
Files; Split PDF Document; Remove Password from PDF; Change PDF Permission Settings. VB.NET Demo Code for Converting PowerPoint to PDF. RasterEdge.Imaging.Font.dll
add jpg to pdf form; create pdf forms
361
Implementing Access Control
<tr>
<th> Password </th>
<td> <input type=”password” ” name=”password”> </td>
</tr>
<tr>
<td colspan=”2” ” align=”center”>
<input type=”submit” ” value=”Log In”>
</td>
</tr>
</table>
</form>
<?php
}
else if($name==’user’&&$password==’pass’)
{
// visitor’s name and password combination are correct
echo ‘<h1>Here it is!</h1>’;
echo ‘I bet you are glad you can see this secret page.’;
}
else
{
// visitor’s name and password combination are not correct
echo ‘<h1>Go Away!</h1>’;
echo ‘You are not authorized to view this resource.’;
}
?>
The code from Listing 16.1 provides a simple authentication mechanism to allow
authorized users to see a page,but it has some significant problems.
This script
n
Has one username and password hard-coded into the script
n
Stores the password as plain text
n
Protects only one page
n
Transmits the password as plain text
These issues can all be addressed with varying degrees of effort and success.
Storing Passwords
There are many better places to store usernames and passwords than inside the script.
Inside the script,modifying the data is difficult.It is possible,but a bad idea,to write a
script to modify itself.Doing so would mean having a script on your server that is exe-
cuted on your server but that can be written or modified by others.Storing the data in
another file on the server lets you more easily write a program to add and remove users
and to alter passwords.
Listing 16.1 1 Continued
C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF
Convert multiple pages PowerPoint to fillable and editable PDF documents. C#.NET Demo Code: Convert PowerPoint to PDF in C#.NET RasterEdge.Imaging.Font.dll.
allow users to save pdf form; pdf save form data
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
Create fillable and editable PDF documents from Excel in both .NET WinForms C# Demo Code: Convert Excel to PDF in Visual C# .NET RasterEdge.Imaging.Font.dll.
adding form fields to pdf; change font size pdf form
362
Chapter 16 6 Implementing Authentication with PHP and MySQL
Inside a script or another data file,you are limited to the number of users you can
have without seriously affecting the speed of the script.If you are considering storing
and searching through a large number of items in a file,you should consider using a
database instead,as previously discussed.As a rule of thumb,if you want to store and
search through a list of more than 100 items,they should be in a database rather than a
flat file.
Using a database to store usernames and passwords would not make the script much
more complex but would allow you to authenticate many different users quickly.It
would also allow you to easily write a script to add new users,delete users,and allow
users to change their passwords.
A script to authenticate visitors to a page against a database is shown in Listing 16.2.
Listing 16.2 2 secretdb.php—Using MySQL to Improve the Simple Authentication
Mechanism
<?php
$name = $_POST[‘name’];
$password = $_POST[‘password’]; 
if(!isset($_POST[‘name’])&&!isset($_POST[‘password’]))
{
//Visitor needs to enter a name and password
?>
<h1>Please Log In</h1>
This page is secret.
<form method=”post” action=”secretdb.php”>
<table border=”1”>
<tr>
<th> Username </th>
<td> <input type=”text” ” name=”name”> </td>
</tr>
<tr>
<th> Password </th>
<td> <input type=”password” ” name=”password”> </td>
</tr>
<tr>
<td colspan=”2” ” align=”center”>
<input type=”submit” ” value=”Log In”>
</td>
</tr>
</table>
</form>
<?php
}
else
{
C# Create PDF Library SDK to convert PDF from other file formats
Create fillable PDF document with fields. Load PDF from existing documents and image in SQL server. RasterEdge.Imaging.Font.dll. RasterEdge.XDoc.PDF.dll.
create a pdf form; adding image to pdf form
363
Implementing Access Control
// connect to mysql
$mysql = mysqli_connect( ‘localhost’, ‘webauth’, ‘webauth’ ’ );
if(!$mysql)
{
echo ‘Cannot connect to database.’;
exit;
}
// select the appropriate database
$selected = mysqli_select_db( $mysql, ‘auth’ );
if(!$selected)
{
echo ‘Cannot select database.’;
exit;
}
// query the database to see if there is a record which matches
$query = “select count(*) from authorized_users where
name = ‘$name’ ’ and
password = ‘$password’”;
$result = mysqli_query( $mysql, $query );
if(!$result)
{
echo ‘Cannot run query.’;
exit;
}
$row = mysqli_fetch_row( $result );
$count = $row[0];
if ( $count > 0 )
{
// visitor’s name and password combination are correct
echo ‘<h1>Here it is!</h1>’;
echo ‘I bet you are glad you can see this secret page.’;
}
else
{
// visitor’s name and password combination are not correct
echo ‘<h1>Go Away!</h1>’;
echo ‘You are not authorized to view this resource.’;
}
}
?>
You can create the database used here by connecting to MySQL as the MySQL 
root
user and running the contents of Listing 16.3.
Listing 16.2 2 Continued
364
Chapter 16 6 Implementing Authentication with PHP and MySQL
Listing 16.3 3 createauthdb.sql— These MySQL Queries Create the auth Database,
the auth Table,and Two Sample Users
create database auth;
use auth;
create table authorized_users ( name varchar(20), 
password varchar(40),
primary key     (name)
);
insert into authorized_users values ( ‘username’, 
‘password’ );
insert into authorized_users values ( ‘testuser’, 
sha1(‘password’) );
grant select on auth.* 
to ‘webauth’
identified by ‘webauth’;
flush privileges;
Encrypting Passwords
Regardless of whether you store your data ina database or a file,storing the passwords as
plain text is an unnecessary risk.A one-way hashing algorithm can provide better securi-
ty with very little extra effort.
PHP provides a number of one-way hash functions.The oldest and least secure is the
Unix Crypt algorithm,provided by the function
crypt()
.The Message Digest 5 (MD5)
algorithm,implemented in the function 
md5()
,is stronger and available in most versions
of PHP.If you do not require compatibility with old PHP versions,use Secure Hash
Algorithm 1 (SHA-1).
The PHP function
sha1()
provides a strong,one-way cryptographic hash function.
The prototype for this function is
string sha1 ( string str [, bool raw_output])
Given the string 
str
,the function will return a pseudo-random 40-character string.If
you set 
raw_output
to be 
true
,you will instead get a 20-character string of binary data.
For example,given the string 
“password”
,
sha1()
returns
“5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8”
.This string cannot be decrypted and
turned back into 
“password”
even by its creator,so it might not seem very useful at first
glance.The property that makes 
sha1()
useful is that the output is deterministic.Given
the same string,
sha1()
will return the same result every time it is run.
Rather than having PHP code like
if( $name == ‘username’ && 
$password == ‘password’ )
{
365
Implementing Access Control
//OK passwords match
}
you can have code like
if( $name == ‘username’ && 
sha1($password) == ‘5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8’ ’ ) )
{
//OK passwords match
}
You do not need to know what the password looked likebefore you used 
sha1()
on it.
You need to know only if the password typed in is the same as the one that was origi-
nally run through 
sha1()
.
As already mentioned,hard-coding acceptable usernames and passwords into a script
is a bad idea.You should use a separate file or a database to store them.
If you are using a MySQL database to store your authentication data,you could either
use the PHP function 
sha1()
or the MySQL function 
SHA1()
.MySQL provides an
even wider range of hashing algorithms than PHP,but they are all intended for the same
purpose.
To use 
SHA1()
,you could rewrite the SQL query in Listing 16.2 as
select count(*) from authorized_users where
name = ‘$username’ ’ and
password = sha1(‘$password’)
This query counts the number of rows in the table named 
authorized_users
that have
a name value equal to the contents of 
$name
and a pass value equal to the output given
by 
SHA1()
applied to the contents of 
$password
.Assuming that you force people to
have unique usernames,the result of this query is either 
0
or 
1
.
Keep in mind that the hash functions generally return data of a fixed size.In the case
of SHA1,it is 40 characters when represented as a string.Make sure that your database
column is this width.
Looking back at Listing 16.3,you can see that we created one user (
‘username’
)
with an unencrypted password and another user with an encrypted one (
‘testuser’
) to
illustrate the twopossible approaches.
Protecting Multiple Pages
Making a script like the ones in Listings 16.1 and 16.2 protect more than one pageis a
little harder.Because HTTP is stateless,there is no automatic link or association between
subsequent requests from the same person.This makes it harder to have data,such as
authentication information that a user has entered,carry across from page to page.
The easiest way to protect multiple pages is to use the access control mechanisms
provided by your web server.We look at these mechanisms shortly.
366
Chapter 16 6 Implementing Authentication with PHP and MySQL
To create this functionality yourself,you could include parts of the script shown in
Listing 16.1 in every page that you want to protect.Using 
auto_prepend_file
and
auto_append_file
,you can automatically prepend and append the code required to
every file in particular directories.The use of these directives was discussed in Chapter 5,
“Reusing Code and Writing Functions.”
If you use this approach,what happens when your visitors go to multiple pages with-
in your site? Requiring them to re-enter their names and passwords for every page they
want to view would not be acceptable.
You could append the details the users entered to every hyperlink on the page.
Because they might have spaces or other characters that are not allowed in URLs,you
should use the function
urlencode()
to safely encode these characters.
This approach still has a few problems,though.Because the data would be included
in web pages sent to the users and the URLs they visit,the protected pages they visit
will be visible to anybody who uses the same computer and steps back through cached
pages or looks at the browser’s history list.Because you are sending the password back
and forth to the browser with every page requested or delivered,this sensitive informa-
tion is being transmitted more often than necessary.
There are two good ways to tackle these problems:HTTP basic authentication and
sessions.Basic authentication overcomes the caching problem,but the browser still sends
the password to the server with every request.Session control overcomes both of these
problems.We look at HTTP basic authentication now and examine session control in
Chapter 22,“Using Session Control in PHP,”and in more detail in Chapter 26,
“Building User Authentication andPersonalization.”
Using Basic Authentication
Fortunately,authenticating users is a common task,soauthentication facilities are built
into HTTP.Scripts or web servers can request authentication from a web browser.The
web browser is then responsible for displaying a dialog box or similar device to obtain
required information from the user.
Although the web server requests new authentication details for every user request,
the web browser does not need to request the user’s details for every page.The browser
generally stores these details for as long as the user has a browser window open and
automatically resends them to the web server as required without user interaction.
This feature of HTTP is called basic authentication.You can trigger basic authentication
using PHP or using mechanisms built into your web server.We look first at the PHP
method,then the Apache method,and finally the IIS method.
Basic authenticationtransmits a user’s name and password in plain text,so it is not
very secure.HTTP 1.1 contains a more secure method known as digest authentication,
which uses a hashing algorithm (usually MD5) to disguise the details of the transaction.
Digest authentication is supported by many web servers and most current-version web
browsers.Unfortunately,as with many recently implemented features,there are many
older browsers still in use that do not support digest authentication and a version of the
standard included in Microsoft IE and IIS that is not compatible with non-Microsoft
products.
Documents you may be interested
Documents you may be interested