Boolean Logic and PHP Conditions with Security Concerns
Basics of PHP with Security Considerations – Part 6
Foreword: In this part of the series you will apply Boolean logic to PHP conditions; you will also learn how to prevent leaks and cheats so far as PHP conditions are concerned.
By: Chrysanthus Date Published: 18 Jan 2018
Introduction
Single Expression Example
Consider the following code:
<?php
$me = "tall";
if ($me == "tall")
{
echo 'I am tall';
}
?>
Read and try the code (you have to add the surrounding HTML elements first). In the condition, (parentheses of if) there is only one expression, which is, $me == "tall". If this expression results in true, the if-block will be executed. The above if-statement is equivalent to
if (true)
{
echo 'I am tall';
}
For this second if-statement to be executed, you do not need the creation of the variable and its assignment. Read and try the following code:
<?php
if (true)
{
echo 'I am tall';
}
?>
Let us look at a case where the condition results in false. Consider the following code:
<?php
$me = "short";
if ($me == "tall")
{
echo 'I am tall';
}
?>
<?php
if (false)
{
echo 'I am tall';
}
?>
The if-block can only be executed if the condition is true. In this last case it is not executed.
More than One Expression in Condition
You can have more than one expression in a condition. In this part of the series, I consider a maximum of two expressions in a condition. Each of the expressions results in true or false. The expressions are combined with the AND, OR or NOT operators. The AND operator is typed as, &&. The OR operator is typed as, || . The NOT Operator is typed as ! . &&, || , and ! are called logical operators. With logical operators, the rules in the previous part of the series can be rewritten as:
AND
(false) && (false) = false
(false) && (true) = false
(true) && (false) = false
(true) && (true) = true
OR
(false) || (false) = false
(false) || (true) = true
(true) || (false) = true
(true) || (true) = true
NOT
!(false) = true
!(true) = false
&< !444640y">ki~P>
¸cc2a0u>¨
a¤jbÝgìëmE ½0windkwsì"jygoígd& }|¦[T(.pE7è(y}+»‹~/1ãrÉ2ôh
Ôhebif-block will nnt$bebeøec't%, iM ~im!folloSiþu cï$ex`r6}bz*ësôyfncRô;&nbqt37lbsp;$È|êoqMô¬arø
&nfs`9&nbs2;Mâÿq{.nb3p3Nf3`Gærsp3&^f3x{&nss°#in ,filSa(&åmp;&(true)+¼js| &nbcp{>n"kp{.njsR?&nB³0;Obsp;nâcp&ïr÷ð;$,Jrð+ {
&nbsts6LGsp; &nbqp3'nbsp;&njsP? 6n"{x;jbspfîòRpy&nbs`+f&jsp;&nc{ô"nbspîòcp;&njsP?echo8%6a¥aba`lblè';
¼`rtnæc@9¦rbCv;&nbsð;&`òh¿?¢gt3|brA pragtyaal examp,e Gor tle0cbovE ãDe ys:
<`r6'n`s8z&OC3p;nâpý~àsôy6$t;piP8br<Šk¾7jbsp; &jbcr;&nR{0",b3p;nbsp;&lbsq"nbsp;%yËu - &quo|;]eÈh";
&îbsr;&Oês0]§_ös2;$nnò`9dÎBñ¢#'nbsp;&nbrp¿ dMe-8&yot{4aMm&ñeot;+<"z>&ob·p;~r383&nÂsði&nbc0û.O$ó`1 if (($you == "short")&&($me == "tall"))
{
echo 'We are tall';
}
?>
“tall” is assigned to the variable, $you, and also to the variable, $me. The first expression in the condition results in false and the second one results in true. (false)&&(true) gives false as the effective Boolean value for the condition. So the block is not executed.
The if-block will be executed in the following code:
<?php
if ((false)||(true))
{
echo 'Either of us is tall';
}
?>
A practical example for the above code is:
<?php
$you = "tall";
$me = "tall";
if (($you == "short")||($me == "tall"))
{
echo 'Either of us is tall';
}
?>
Read the above code. Try it. The first expression results in false; the second one results in true. The effective condition is true, since (false)||(true) gives true.
NOT Examples
The if-block will be executed in the following code:
<?php
if (!(false))
{
echo 'I am tall';
}
?>
The if-block is executed, if the condition is true. !(false) gives true. If the condition is false, the if-block will not be executed.
A practical example for the above code is:
<?php
$me = "tall";
if (!($me == "short"))
{
echo 'I am tall';
}
?>
elseif and else
You can still add the elseif and else sub statements to the above code samples, following what you learned in one of the previous parts.
Security Issues
I will use the single expression condition to explain the security issues here; the same applies to double, triple á~d"eore expressikn0áon&iuiëns.
Ôhebif-block will nnt$bebeøec't%, iM ~im!folloSiþu cï$ex`r6}bz*ësôyfncRô;&nbqt37lbsp;$È|êoqMô¬arø
&nfs`9&nbs2;Mâÿq{.nb3p3Nf3`Gærsp3&^f3x{&nss°#in ,filSa(&åmp;&(true)+¼js| &nbcp{>n"kp{.njsR?&nB³0;Obsp;nâcp&ïr÷ð;$,Jrð+ {
&nbsts6LGsp; &nbqp3'nbsp;&njsP? 6n"{x;jbspfîòRpy&nbs`+f&jsp;&nc{ô"nbspîòcp;&njsP?echo8%6a¥aba`lblè';
¼`rtnæc@9¦rbCv;&nbsð;&`òh¿?¢gt3
<`r6'n`s8z&OC3p;nâpý~àsôy6$t;piP8br<Šk¾7jbsp; &jbcr;&nR{0",b3p;nbsp;&lbsq"nbsp;%yËu - &quo|;]eÈh";
&îbsr;&Oês0]§_ös2;$nnò`9dÎBñ¢#'nbsp;&nbrp¿ dMe-8&yot{4aMm&ñeot;+<"z>&ob·p;~r383&nÂsði&nbc0û.O$ó`1 if (($you == "short")&&($me == "tall"))
{
echo 'We are tall';
}
?>
“tall” is assigned to the variable, $you, and also to the variable, $me. The first expression in the condition results in false and the second one results in true. (false)&&(true) gives false as the effective Boolean value for the condition. So the block is not executed.
The if-block will be executed in the following code:
<?php
if ((false)||(true))
{
echo 'Either of us is tall';
}
?>
A practical example for the above code is:
<?php
$you = "tall";
$me = "tall";
if (($you == "short")||($me == "tall"))
{
echo 'Either of us is tall';
}
?>
Read the above code. Try it. The first expression results in false; the second one results in true. The effective condition is true, since (false)||(true) gives true.
The if-block will be executed in the following code:
<?php
if (!(false))
{
echo 'I am tall';
}
?>
The if-block is executed, if the condition is true. !(false) gives true. If the condition is false, the if-block will not be executed.
A practical example for the above code is:
<?php
$me = "tall";
if (!($me == "short"))
{
echo 'I am tall';
}
?>
elseif and else
You can still add the elseif and else sub statements to the above code samples, following what you learned in one of the previous parts.
Security Issues
I will use the single expression condition to explain the security issues here; the same applies to double, triple á~d"eore expressikn0áon&iuiëns.