PHP语言的概括
PHP 是可以创建动态交互性站点的强有力的服务器端的脚本语言。
PHP可以做很多东西,特别是web网站开发,也可以使用的非常广泛。能够快速,灵活,实用使得PHP语言可以更好的开发任何网站。
PHP 是一种 HTML 嵌入式的脚本语言。php文件以.php结尾。PHP语言的很多语法来自 C,Java 和 Perl,并具有几个 PHP 独有的特点。PHP语言的主要目标是让 Web 开发程序员可以快速的书写动态生成的网页。
目录:
PHP 能做什么?
(1)PHP 能生成动态页面内容等.
(2)PHP 能创建、打开、读取、写入、关闭服务器上的文件等.
(3)PHP 能收集表单数据等.
(5)PHP 能添加、删除、修改您的数据库中的数据等.
(6)PHP 能限制用户访问你的网站上的一些页面等.
(7)PHP 能加密数据等.
PHP代码理解:
(1)基本PHP程序.
<?php
echo 'hrllo,world'; #echo是php的输出函数.
#每行代码必须以分号;结尾
?>
效果图:
(2)变量.
<?php
$a=2; #变量以$符号,变量名称对大小写敏感.
$b=3; #可以直接通过赋值来指定变量类型.
$c=$a+$b; #双引号中变量会被解析执行.
echo "$a+$b="."$c"; #2+3=5(点号.用于连接字符串的)
?>
效果图.
(3)输出 HTML 代码.
<?php #在浏览器中查看到的源码
$a=2; #<h1>2+3=5</h1>
$b=3; #双引号中变量会被解析执行.
$c=$a+$b;
echo "<h1>$a+$b="."$c</h1>";
?>
效果图.
(4)isset()函数.
<?php
$a=100;
echo (isset($a)); #isset()函数是判断变量是否存在,存在返回值1,不存在返回值空.
?>
效果图.
(5)注释.
//这是单行注释.
#这也是单行注释.
/*
这是多行注释块.
它横跨了.
多行.
*/
(6)接收表单数据.
<?php #全局变量:
$username=$_GET['username']; #$_GET,接收通过get方式传递数据.
$password=$_GET['password']; #$_POST,接收通过post方式传递数据.
echo "<p>用户名:"."$username</p>"; #$_REQUEST,接收通过get或post方式传递数据.
echo "<p>密 码:"."$password</p>";
?>
效果图.
(7)HTML页面的传递代码.
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>登录</title>
</head>
<body>
<form action="bgxg.php" method="get"> <!--bgxg.php是接收表的文件名,get是接收表的传递方式.-->
<p>用户名:<input type="text" name="username"></p>
<p>密 码:<input type="text" name="password"></p>
<p><input type="submit" value="确定"></p>
</form>
</body>
</html>
(8)if 判断语句.
<?php
$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
if($username == "admin" and $password == "123"){ #在进行判断时,等于要使用“==”,“=是” 专用于给变量赋值.
echo "你好,$username"; #and 之前的语句执行成功时,才会执行后面的语句.
}else{
echo "请输入正确的用户名";
}
?>
效果图.
(9)for 循环语句.
<?php
$sum = 0;
for ($i=1;$i<=10;$i++){
$sum = $sum + +$i;
}
$i=$i-1;
echo "1累加到$i"."的和是$sum";
?>
效果图.
(10)while循环语句.
<?php
$sum=0;
$i=2;
while ($i<=12){
$sum=$sum+$i;
$i++;
}
$i =$i-1;
echo "2累加到$i"."的和是$sum";
?>
效果图.
(11)PHP 操作数据库的一些步骤.
mysql_connect("localhost","root","123"); #通过php连接上Mysql,localhost是IP地址.
mysql_select_db("test"); #选择要操作的数据库,"test"是数据库的名字.
mysql_query("set names utf8") #设置客户端和连接字符集.
#通过php进行增删改查
mysql_close($conn); #释放连接资源(就是断开连接)
(12)用户身份验证.
$username = $_GET['username'];
$password = $_GET['password'];
$conn = mysql_connect("127.0.0.1","root","123"); #通过php连接上Mysql,127.0.0.1是IP地址.
mysql_select_db("test"); #选择要操作的数据库,"test"是数据库的名字.
mysql_query("set names utf8") #设置客户端和连接字符集.
$sql = "select * from hack where username = '$username' and password = '$password'";
#在(hack)数据库里查询,查询的条件(where)为:username = '$username' and password = '$password'
$res = mysql_query($sql,$conn); # mysql_query 这个函数的执行语句的.
if (mysql_num_rows($res) !=0) { #if是判断,mysql_num_rows是行,就是统计($res)变量有几行.
echo "登录成功";
}else{
echo "登录失败";
}
mysql_close($conn); #释放连接资源(就是断开连接)
(13)PHP常见的代码 分析.
1. mysql_query( ) 函数的理解:
(1)mysql_query( )如果是执行查询之类的语句( select ),那么会返回一个资源标识符,也就是我们要查找的数据结果集.
(2)mysql_query( )如果是执行增删改之类的语句,返回的就是true或者false了.
if(isset($_GET['Submit'])) #isset函数是判断是否存在的(也就是:判断Submit变量是否存在.)
$id = $_GET['id']; #获取id变量的值并赋值给变量$id.
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id"; #将select查询语句赋值给变量$getid
$result= mysql_query($getid) or die('<pre>'.mysql_error().'</pre>');
#(1)mysql_query()函数执行mysql查询.
#(2)die()函数输出一条消息,并退出当前脚本.
#(3)mysql_error()函数返回上一个MySQL操作产生的文本错误信息.
#(4)or之前的语句执行不成功时,才会执行后面的语句.
#(5)and之前的语句执行成功时,才会执行后面的语句。
2. mysql_result( )函数 是返回结果的一个字段的值.
$num = mysql_numrows(Sresult); #返回结果集中行的数目.
$i = 0;
while ($i< $num) { #mysql_result函数是返回结果的一个字段的值.
$first = mysql_result($result,Si,"first_name"); #返回结果集中first_name字段的值.
$last = mysql_result($result,Si,"last_name"); #返回结果集中last_name字段的值.
echo '<pre>'; #<pre> </pre>是html标签,意思是按原样输出不做更改。
echo 'ID:'.$id.'<br>First name:'.$first.'<br>Surname:'.$last; #主要是输出这个内容.
echo '</pre>'; #<br/>是html语言里的换行符;
$i++;
}
3.mysql_real_escape_string( )函数 对用户输入的参数进行了过滤.
$id = $_GET['id'];
$id = mysql_real_escape_string($id);
#mysql_real_escape_string()函数对用户输入的id参数进行了过滤.
#可以将单引号【'】、双引号【"】、反斜杠【\】、空字符【null】等进行转义.
#转义是把指定的字符转换成无意义的符号,比如PHP解析器不会把经过转义的引号当成引号来看待.
#PHP中另一个功能类似的函数: addslashes()
4.stripslashes( )函数的作用是删除由addslashes()函数添加的反斜杠.
magic_quotes_gpc 魔术引号.
(1)在PHP配置文件php.ini中存在magic_quotes_gpc选项,被称为魔术引号.
(2)在high级别下,PHP的magic_quotes_gpc被自动设为on.
(3)开启之后,可以对所有的GET、POST和CQOKIE传值的数据自动运行addslashes()函数
$id = $_GET['id'];
$id = stripslashes($id);
$id = mysql_real_escape_string($id);
#stripslashes( )函数的作用是删除由addslashes()函数添加的反斜杠,也就是去除addslashes()函数的转义。
5.is_numeric()函数 是判断变量是否是数字或者数字字符串.
if (is_numeric(Sid)){
$getid = "SELECT first_name, last_name FROMusers WHERE user_id = "$id"";
#在执行查询之前,使用了if语句进行判断,判断的条件是is_numeric()函数。判断用户输入的数据是否是数字型,只要不是数字型就—概报错。
#and、or、 select等语句都无法执行。
如何从代码层面挖掘SQL注入漏洞.
漏洞挖掘主要可以从以下几个方面着手:
(1)代码中负责获取用户数据的变量:S_GET、S_POST、$_COOKIE、$_SERVER
(2)代码中负责执行数据库查询操作的函数:mysql_query()
(3)在代码中对这些变量和函数进行搜索跟踪,从而分析是否存在漏洞
如何从代码层面防范SQL注入.
(1)对于数字型注入,可以使用if语句,并以 is_nuynber() 函数作为判断条件进行防御.
(2)对于字符型注入,对用于接收用户参数的变量,用 mysql_real_esca pe_string( ),addslashes( )等函数进行过滤.
参考链接:PHP 教程 | 菜鸟教程