【PHP开发实战】

Cx330、GG Bond、库伊拉

完成时间:8.6-8.18
https://www.php.cn/course/163.html
跟着上面链接开发一个小Web系统,代码通过github或者码云,整一个公开仓库,开发一部分就推一部分到远程仓库,最后我会拷贝你这个仓库到本地看你代码和在我本地的运行情况。

  • README要包含Web系统的运行环境、部署手册
  • 编码要注意安全性,不能包含SQL注入、XSS等OWASP TOP10漏洞

问题可能我php版本高并未完整本地实现:

Cx330的问题

https://github.com/Github-Cx330/Github-Cx330.github.io/blob/main/Cx330php/admin/modi.php

$res = mysql_query($sql);
没有$conn
image.png

tongtong的问题

tongtong的跑起可以,问题不大,然后目录没Cx330那样分开,

很多sql注入太明显了,
image.png

快速审了一下
image.png
未授权访问
http://127.0.0.1/tcms/admin/main.php
image.png

sql注入

modi.php
而且没有权限控制
image.png
image.png
image.png

  1. /addcontact.php
  2. post

image.png

image.png

xss:

http://127.0.0.1/tcms/admin/product.php/%22%3E%3C/a%3E%3Cscirpt%3Ealert(%22xss%22);%3C/scirpt%3E%3Ca%20href=;%3C/scirpt%3E%3Ca%20href=)
image.png
image.png

防御措施:

php.ini:

如果magic_quotes_gpc=On,PHP解析器就会自动为post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符(认为是php的字符)引起的污染

addslashes函数

addslashes函数过滤的值范围和GPC是一样的,即单引号(‘)、双引号(“)、反斜杠()及空字符NULL,它只是一个简单的检查参数的函数,大多数程序使用它是在程序的人口,进行判断如果没有开启GPC,则使用它对$_POST/$_GET等变量进行过滤,不过它的参数必须是string类型,所以曾经某些程序使用这种方式对输入进行过滤时出现了绕过,比如只遍历$_GET的值,当时并没有考虑到$_GET的值也是一个数组。我们来看一个例子如下:
<?php
$str=”phpsafe’”;
echo addslashes($str);?>
上面的例子输出:phpsafe\’。

mysql[real]escape_string函数

mysql_escape_string和 mysql_real_escape_string函数都是对字符串进行过滤,在PHP4.0.3以上版本才存在,如下字符受影响[\01][[1][[][][‘][“][\xla],两个函数唯一不一样的地方在于mysql_real_escape_string接受的是一个连接句柄并根据当前字符集转义字符串,所以推荐使用mysqlreal_escape_string。
使用举例:
<?php
$con = mysql_connect(“localhost”, “root”, “123456”);
$id =mysql_real_escape_string (s_GET[‘id’],$con);
$sql=”select from test where id=’”.sid.”‘“;
echo $sql;
当请求该文件?id=l’时,上面代码输出:select
from test where id=’1\”