(由于图片比较大,看的时候需要关闭侧边栏~)
(1)Web前端HTML(0.5分)
能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。
(2)Web前端javascipt(0.5分)
理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。
(3)Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表(0.5分)
(4)Web后端:编写PHP网页,连接数据库,进行用户认证(0.5分)
(5)最简单的SQL注入,XSS攻击测试(0.5分)
<form>
元素定义 HTML 表单input
元素、复选框、单选按钮、提交按钮等等<input>
元素是最重要的表单元素,<input>
元素有很多形态,根据不同的 type
属性:
text
:定义常规文本输入radio
:定义单选按钮输入(选择多个选择之一)submit
:定义提交按钮(提交表单)<select>
元素定义下拉列表<option>
元素定义待选择的选项<textarea>
元素定义多行输入字段(文本域)<button>
元素定义可点击的按钮GET
和 POST
GET
:从指定的资源请求数据,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的
POST
:向指定的资源提交要被处理的数据,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的
httpd -v
查看Apache服务sudo apachectl start
以开启Apache服务http://127.0.0.1
或http://localhost
,如果出现下面的界面就表示Apache服务可以正常使用/Library/WebServer/Documents
sudo apachectl stop
以关闭Apache服务输入sudo apachectl restart
以重启Apache服务
或者使用xampp开启Apache服务,这个比较方便
<form>
元素定义 HTML 表单input
元素、复选框、单选按钮、提交按钮等等<input>
元素是最重要的表单元素,<input>
元素有很多形态,根据不同的 type
属性:
text
:定义常规文本输入radio
:定义单选按钮输入(选择多个选择之一)submit
:定义提交按钮(提交表单)<select>
元素定义下拉列表<option>
元素定义待选择的选项<textarea>
元素定义多行输入字段(文本域)<button>
元素定义可点击的按钮GET
:从指定的资源请求数据,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的
POST
:向指定的资源提交要被处理的数据,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>登陆页面</title>
</head>
<body background="img/login.jpg">
<h1 align="center" >登陆界面</h1><br>
<div style="text-align: center">
<form action="login" method="post">
用户名 <input type="text" name = "username" /> <br><br>
密码 <input type="password" name = "password"> <br>
<input type = "submit" value = "提交">
</form>
</div>
</body>
</html>
<script language="javascript">
function check(){
var sUserName = document.form_login.username.value ;
var sPassword = document.form_login.password.value ;
if ((sUserName =="") || (sUserName=="Your email")){
alert("User Email!");
return false ;
}
if ((sPassword =="") || (sPassword=="Your password")){
alert("Password!");
return false ;
}
}
</script>
package servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javabean.DBUtil;
public class LoginServlet implements javax.servlet.Servlet {
@Override
public void destroy() {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, InstantiationException, IllegalAccessException {
String userName = request.getParameter("username");
String password = request.getParameter("password");
DBUtil db = new DBUtil();
boolean canLogin = db.loginSuccess(userName, password);
if (canLogin) {
response.sendRedirect("index.jsp");
} else {
response.sendRedirect("back.jsp");
}
}
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
HttpServletRequest rq = (HttpServletRequest) request;
HttpServletResponse rs = (HttpServletResponse) response;
try {
doPost(rq, rs);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
index.jsp
login.jsp
back.jsp
,如果用户输入错误,会返回如下界面test
的连接user
user_info
lzh
和test
detail
sudo vim /etc/apache2/httpd.conf
#LoadModule php7_module libexec/apache2/libphp7.so
,删除注释(删除前面的#)mac下Apache的默认文件夹为/Library/WebServer/Documents,在该目录下创建一个名为index.php文件,输入命令:sudo vim /Library/WebServer/Documents/index.php
在文件中添加如下内容:
<?php
phpinfo();
?>
index.html.en
和index.html.en~orig
文件,输入命令:sudo rm /Library/WebServer/Documents/index.html.en
sudo rm /Library/WebServer/Documents/index.html.en~orig
在Safari中输入127.0.0.1或localhost,出现如下PHP的info页,表示PHP开启成功:
如果不成功,用命令sudo apachectl restart重启Apache
sudo vim /Library/WebServer/Documents/test.php
<?php
include($_GET["a"]);
?>
Safari打开127.0.0.1/test.php?a=/etc/passwd
可看到/etc/passwd
文件的内容(PHP变量大小写敏感)
/etc/passwd
文件存放的是操作系统用户信息,该文件为所有用户可见。用户信息记录了由6个分号组成的7个信息,解释如下:
尝试获取表单数据,输入命令:?sudo vim /Library/WebServer/Documents/login.php
代码如下:
<!DOCTYPE html>
<html>
<body>
<?php
echo "我的第一段 PHP 脚本!";
$uname=($_GET["username"]);
$pwd=($_GET["password"]);
echo $uname;
echo $pwd;
?>
</body>
</html>
该php的参数是从前面login.html
提交的表单获取的数据
下面的代码是修改之后的
<?php
$uname=$_POST["Email"];
$pwd=$_POST["Password"];
echo $uname;
$query_str="SELECT * FROM login where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "root", "", "user");
$query_str1="use pyx;";
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
echo "connection ok!";
/* Select queries return a resultset */
if ($result = $mysqli->query($query_str1))
echo"<br>Success into database!";
echo$uname;
if ($result = $mysqli->query($query_str)) {
if ($result->num_rows > 0 ){
echo "<br> {$uname}:Welcome!!! <br> ";
}
else {
echo "<br> login failed!!!! <br> " ; }
/* free result set */
$result->close();
}
$mysqli->close();
?>
‘ or 1=1#
,密码任意输入,可登陆成功:成功登陆!
这是由于输入的用户名和我们的代码中select语句组合起来变成了select * from users where username=‘‘ or 1=1#‘ and password=‘‘,#相当于注释符,会把后面的内容都注释掉,而1=1是永真式,所以这个条件永远成立,所以不管密码是否输入正确,都能够成功登陆
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被骇客用来编写危害性更大的phishing攻击而变得广为人知
/Library/WebServer/Documents/
目录下在用户名输入框输入<img src="test.png" />
,密码随意,即可读取图片:
本次实验仿照之前网络安全编程,许多问题之前遇到过,并一一解决过
这次实验难度不是很大,主要是之前做过类似的,而且Mac上自己自带的Apache和PHP相当方便,省去了很多麻烦
原文:https://www.cnblogs.com/cbmwtsl/p/10891056.html