【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
tongtong的问题
tongtong的跑起可以,问题不大,然后目录没Cx330那样分开,
很多sql注入太明显了,
快速审了一下
未授权访问
http://127.0.0.1/tcms/admin/main.php
sql注入
modi.php
而且没有权限控制
/addcontact.php
post
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=)
防御措施:
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’时,上面代码输出:selectfrom test where id=’1\”