目录
一、docker
1.安装,启动
2.docker相关命令
docker search nginx 搜索镜像
docker pull docker.io/nginx 拉取镜像
docker images -a 列出本地所有的镜像
docker ps -a 列出所有的容器
docker exec 容器ID进到容器内
docker run [OPTIONS] IMAGE根据镜像新建并启动容器。IMAGE是镜像ID或镜像名称
OPTIONS说明:
--name="容器新名字":为容器指定一个名称
-d:后台运行容器,并返回容器ID,也即启动守护式容器
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同时使用
-p:随机端口映射
3.如何使用?
如何使用docker进行安装nginx???
二、LNMP
1.认识LNMP
Linux+nginx+MySQL+PHP
2.sql注入漏洞挖掘
<?php
escape($_REQUEST);
escape($_POST);
escape($_GET);
function escape(&$arg) {
if(is_array($arg)) {
foreach ($arg as &$value) {
escape($value);
}
} else {
$arg = str_replace(["'", '\\', '(', ')'], ["'", '\\\\', '(', ')'], $arg);
}
}
function arg($name, $default = null, $trim = false) {
if (isset($_REQUEST[$name])) {
$arg = $_REQUEST[$name];
} elseif (isset($_SERVER[$name])) {
$arg = $_SERVER[$name];
} else {
$arg = $default;
}
if($trim) {
$arg = trim($arg);
}
return $arg;
}
注意:arg是获取用户输入的$_REQUEST
或$_SERVER。
<?php
function actionRegister(){
if ($_POST) {
$username = arg('username');
$password = arg('password');
if (empty($username) || empty($password)) {
$this->error('Username or password is empty.');
}
$email = arg('email');
if (empty($email)) {
$email = $username . '@' . arg('HTTP_HOST');
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$this->error('Email error.');
}
$user = new User();
$data = $user->query("SELECT * FROM `{$user->table_name}` WHERE `username` = '{$username}'");
if ($data) {
$this->error('This username is exists.');
}
$ret = $user->create([
'username' => $username,
'password' => md5($password),
'email' => $email
]);
if ($ret) {
$_SESSION['user_id'] = $user->lastInsertId();
} else {
$this->error('Unknown error.');
}
}
}
以上是注册功能的代码,在登录时进行用户名和密码的填写,然后将三者传入到create方法。还有该网站的域名从arg('HTTP_HOST')获取,在往上一层就是从$_REQUEST
或$_SERVER中获取。
此时会出现一个SQL注入漏洞???
因为$_SERVER
没有经过转义,只需要在HTTP头Host值中引入单引号,即可造成一个SQL注入漏洞。
3.如何绕过检测进行注入
同时该代码中还有一次检测,filter_var($email, FILTER_VALIDATE_EMAIL),所以在进行注入时要绕过。如何绕过呢???
(1)将特殊字符用\
转义,如Joe\'Blow@example.com
(2)或将local part包裹在双引号中,如"Joe'Blow"@example.com
(3)local part长度不超过64个字符
为什么???这个邮箱包含单引号,将闭合SQL语句中原本的单引号,造成SQL注入漏洞。
以上为docker和lnmp相关介绍,不够全面后期进一步完善。