docker安装lamp环境
docker安装lamp环境(该docker:lincode ubuntu14.04,php5.5,mysql,约372mb):
docker search lamp
# 选择lincode下载 下载速度较快 稳定
docker pull linode/lamp
#镜像端口、名称、文件夹映射都可以配置,一经配置,修改比较麻烦,建议一次配好
docker run -it -p 80:80 -p 3306:3306 -p 443:443 --name lamp linode/lamp /bin/bash
# 下载完成看一下配置好的镜像
docker images
#用 docker rmi 镜像id 可以删除
#启动镜像 stop/restart
sudo docker start lamp
#查看运行中的镜像
docker ps -a
#shell进入镜像
sudo docker exec -it lamp /bin/bash
如果后期需要更新配置:
修改映射关系的一个例子
#从容器创建一个新的镜像,可手动删除源镜像
sudo docker commit 964f5db616e6 lamp2
#设置该镜像的配置
sudo docker run -it -p 80:80 -p 3306:3306 -p 443:443 -v /home/muddyway/下载/myzoo:/var/www/example.com/public\_html/myzoo -v /home/muddyway/下载/attack:/var/www/attack.com/public\_html lamp2 /bin/bash
service apache2 start
service mysql start
# 可以通过netstat -pant 命令查看80和3306端口有没有开启成功
mysql -u root -p
#密码:Admin2015
#修改root可远程登录:
mysql>use mysql;
mysql>update user set host = '%' where user = 'root' and host='127.0.0.1';
#修改密码:
mysql>update user set password=password("your_password") where user='root';
#刷新权限
FLUSH PRIVILEGES;
#检查获取源更新
apt update
#升级包(可选)
apt upgrade
apt install -y php5-mysql
apt install -y php5-gd
#然后重启apache2:
service apache2 restart
#再次确认mysql和apache2有没有安装成功:
netstat -pant
#可以通过下面的命令查看服务器上有哪些php的扩展:
apt-cache search php5-\*
apt-get remove vim-common
apt-get install vim
安装phpmyadmin
apt install phpmyadmin
#安装过程中会要求选择web server:apache2或lighttpd,按空格选择apache2,按Tab键确定就行。然后会要求输入密码,就是安装mysql的root密码。
ln -s /usr/share/phpmyadmin /var/www/html
有的人可能没有html目录,就把“/html”去掉就好了。
然后在浏览器输入localhost/phpmyadmin,就可以看见phpmyadmin的登录界面了。
如果自己需要了解https参考,一般主机商提供免费https证书
配置虚拟主机参考
建立host映射(这一步不是在docker做的,是配置主机与docker的映射):
attack.com是已经建立好的虚拟主机
sudo vim /etc/hosts
127.0.0.1 attack.com
sudo /etc/init.d/networking restart
开启apache虚拟主机开关:
vi /etc/apache2/apache2.conf
#修改 HostnameLookups On
如果php需要调试可以打开错误报告开关(而不是显示500):
/etc/apache2/apache2.conf
php_flag display_errors on
php_value error_reporting 2039
如果没有建立docker映射文件夹,需要手动将自己文件拷贝到docker里apache服务器站点目录下:
sudo docker cp /home/muddyway/下载/myzoo/includes/transfer.html 964f5db616e6:/var/www/attack.com/public_html/transfer.html
web安全实践
视频
需要myzoo php5版本
开始
sql注入演示,在myzoo中的profile中输入:
', Zoobars=100, Profile='hello
查看源码,发现在处理$profile参数时,没有进行防止sql注入的相应的过滤。
$sql = "UPDATE Person SET Profile='$profile' ".
"WHERE PersonID=$user->id";
123' or 1=1#, 密码填 123' or 1=1#
css修改,在myzoo中的profile中输入:
csrf
建立攻击网站(localhost):
https://attack.test.com/trans...
抽奖
#模拟post
#嵌入原页面
#js post提交
防御:
- 1.session token
session_start();
提交post后处理逻辑
$_SESSION["csrf"] = md5(uniqid(mt_rand(), true));
"/> - 2.refer
echo $_SERVER['HTTP_REFERER'];
if ($_SERVER['HTTP_REFERER'] != "https://bank.test.com/myzoo/transfer.php") {
echo "transfer fail";
}else{
echo "transfer pass";
}
使用post方式防御CSRF使用https防御CSRF
xss
user
hello
修改 myzoo/user.php源码
$allowed_tags =
'
点击劫持:
https://attack.test.com/click.php
三种隐藏元素方法:
display:none
没有存在过的痕迹
visibility:hidden
有存在过的痕迹,但不见了,点击没有效果
opacity:0
有存在过的痕迹,但不见了,点击有效果
方法一、后台防御
X-Frame-Options
DENY:禁止iframe
SAMEORIGIN:只允许相同域名下的网页iframe,同源政策保护
ALLOW-FROM: https://example.com:白名单限制
在transfer.php页面头加上,则无法加载iframe。
header('X-Frame-Options:DENY'); #所有的网页都不允许加载iframe
header('X-Frame-Options:SAMEORIGIN');#同源网页可以加载iframe
方法二、js防御
在transfer.php页面加上,效果是如果外部网页加载iframe,则重定位到transfer.php页面。
ajax
速度快、资源少、异步、请求和接收
1.资源未加载
2.open结束
3.发送成功
4.接收中
5.加载资源成功
XSS注入了javascript脚本,这个脚本就可以通过ajax获取用户信息并通过ajax提交给其他站点
同源策略
cors
Access-Control-Allow-Origin: example.com
Access-Control-Request-Method: GET, POST
Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Range, Origin
Access-Control-Expose-Headers: Content-Range
Access-Control-Max-Age: 3600