目录介绍:
- 1、汇编语言程序设计,实现两个数组的合并.设数组a和b中均包含6个数据,要求合并后数据按照降序排列并显示。
- 2、求编个java程序要求:编写一个求大数的阶乘,不能用biginteger,并且使用数组不能浪费,不
- 3、如何避免XSS攻击和SQL注入
- 4、$this->input->post(“”,true)和$this->input->xss_clean($this->input->post(“”)),
- 5、用汇编语言编写一个程序求出6个有符号整数中的最大值并输出,这6个数从键盘输入。
- 6、如何在jetty服务器层面解决XSS漏洞?
汇编语言程序设计,实现两个数组的合并.设数组a和b中均包含6个数据,要求合并后数据按照降序排列并显示。
8086汇编代码:
a(array1)、b(array2)两数组均为降序排列,元素个数不限。
程序重点是如何使用字串的传送指令(lodsw、stosw、movsw),
对整数数据类型而言,比高级语言编制的程序简明太多了。
code segment
assume cs:code
org 100h
start: jmp bbb
array1: dw 89,67,56,45,34,23,12
n1 equ ($-array1)/2
num1 dw ($-array1)/2
array2: dw 167,156,80,78,60,50,40,30,20,10
n2 equ ($-array2)/2
num2 dw ($-array2)/2
array3 dw n1+n2 dup(?)
num3 dw ($-array3)/2
scx dw ?
sdx dw ?
ssi dw ?
sbx dw ?
bbb: push cs
pop ds
push cs
pop es
lea si,array1
lea di,array3
lea bx,array2
mov cx,num1
mov dx,num2
cli
@1:
cmp dx,0
je @3
lodsw
cmp ax,[bx]
jnc @2 ;无符号数,对有符号数改为 jg @2
mov ax,[bx]
stosw
inc bx
inc bx
dec dx
dec si
dec si
jmp @1
@2:
stosw
loop @1
@3: mov scx,cx
mov sdx,dx
mov ssi,si
mov sbx,bx
cmp word ptr scx,0
je @4
mov cx,scx
mov si,ssi
rep movsw
@4: cmp word ptr sdx,0
je @5
mov cx,sdx
mov si,sbx
rep movsw
@5:
lea si,array3
mov cx,num3
@6:
mov ax,[si]
call dispaxs
inc si
inc si
loop @6
mov ah,4ch
int 21h
;=========================================
DISPAXS PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSH DS
PUSH ES
PUSHF
PUSH CS
POP DS
PUSH CS
POP ES
MOV CX,6
LEA DI,DISPAXSS
@DISPAXS:
MOV BYTE PTR [DI],32
INC DI
LOOP @DISPAXS
PUSH AX
MOV DL,32
MOV AH,2
INT 21H
POP AX
MOV BYTE PTR NZS,0
MOV BYTE PTR SIGNS,0
CMP AX,0
JGE @DISPAXS0
MOV BYTE PTR SIGNS,1
NEG AX
@DISPAXS0:
PUSH AX
LEA SI,DIVARRS
LEA DI,DISPAXSS
INC DI
MOV CX,5
@DISPAXS1:
POP AX
MOV DX,0
MOV BX,[SI]
DIV BX
PUSH DX
CMP AL,0
JNE @DISPAXS2
CMP BYTE PTR NZS,1
JE @DISPAXS2
CMP CX,1
JE @DISPAXS2
MOV DL,20H
JMP @DISPAXS3
@DISPAXS2:
ADD AL,30H
MOV DL,AL
MOV BYTE PTR NZS,1
@DISPAXS3:
MOV BYTE PTR[DI],DL
INC SI
INC SI
INC DI
LOOP @DISPAXS1
POP DX
CMP BYTE PTR SIGNS,1
JNE @DISPAXS6
LEA SI,DISPAXSS
ADD SI,5
@DISPAXS4:
CMP BYTE PTR [SI],32
JE @DISPAXS5
DEC SI
JMP @DISPAXS4
@DISPAXS5:
MOV BYTE PTR [SI],'-'
@DISPAXS6:
LEA DX,DISPAXSS
MOV AH,9
INT 21H
POPF
POP ES
POP DS
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
DIVARRS DW 10000,1000,100,10,1
NZS DB 0
SIGNS DB 0
DISPAXSS DB 32,32,32,32,32,32,'$'
DISPAXS ENDP
;==================================
code ends
end start
求编个java程序要求:编写一个求大数的阶乘,不能用biginteger,并且使用数组不能浪费,不
1楼的肯定是不对的,既然不能用BigInteger,肯定也不能用类似的BigDecimal。所以一般能想到的方法就是用数组存储高位,像2楼说的竖式乘法一样慢慢算。其实JDK中的BigInteger也是用的这个很基本的算法,只不过它的效率更好,代码更简洁。下面是我写的一个,根据BigInteger的算法改的,效率算是比较优秀了,忘采纳(另外,结果是采用的控制台打印,好像数据大了,控制台会显示不出来,你可以打印到文本当中,这个程序要求栈内存要设置的比较大,不然会内存溢出,加上这个虚拟机参数运行-Xss512m):
public class Factorial
{
private static final int MAX = 1000000000;
public static final String ENTER = "\n";
public static void main(String args[])
{
int l = 10000;
int[] result = getFacorial(l);
StringBuilder sb = new StringBuilder();
sb.append(result[result.length - 1]);
for (int i = result.length - 2; i = 0; i--)
{
int n = String.valueOf(result[i]).length();
sb.append(("000000000".substring(n) + result[i]));
}
sb.append(ENTER);
System.out.println("一共" + sb.length() + "位:");
System.out.print(sb.toString());
}
/**
* 递归算阶乘
* @param L
* @return
*/
public static int[] getFacorial(int n)
{
if (n == 1) return new int[]{1};
int[] multiplyToLen = multiplyToLen(getFacorial(n - 1), n);
return multiplyToLen;
}
/**
* 主要算法还是跟BigInteger一样,只不过我为了输出,每个int只保留9位。
* @param value
* @param n
* @return
*/
private static int[] multiplyToLen(int[] value, int n)
{
//n可能大于max,分成两个
long dh = n / MAX;
long dl = n % MAX; //后32位
int xlen = value.length;
//L相当于两个int,可以得出最后的位数最多为 xlen + 2
//可以自己去证明:n位 * m位,结果最多为 n + m位,最少为n + m - 1位
int[] result = (dh == 0L) ? (new int[xlen + 1]) : (new int[xlen + 2]);
long carry = 0;
for (int i = 0; i xlen; i++)
{
long product = (value[i]) * dl + carry;
result[i] = (int)(product % MAX);
carry = product / MAX;
}
result[xlen] = (int)carry;
//算高位
if (dh != 0L)
{
carry = 0;
for (int i = 0; i xlen; i++)
{
long product = (value[i]) * dh + result[i + 1] + carry;
result[i] = (int)(product % MAX);
carry = product / MAX;
}
result[result.length - 1] = (int)carry;
}
//carry = 0,证明不需要进最后一位,删除
if (carry == 0L)
result = java.util.Arrays.copyOfRange(result, 0, result.length - 1);
return result;
}
}
如何避免XSS攻击和SQL注入
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.
防护
归纳一下,主要有以下几点:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和
双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。
$this->input->post(“”,true)和$this->input->xss_clean($this->input->post(“”)),
这是CI 里的吧 虽然接触CI 不多 但个人感觉$this-input-post("",true) 好点 。之前有用过xss_clean 这个 直接 Post 都无法提交了 直接失败 。貌似是那里需要配置怎么的 接触不多 可在官 方手册 下查下
用汇编语言编写一个程序求出6个有符号整数中的最大值并输出,这6个数从键盘输入。
CODE SEGMENT
ASSUME CS:CODE
ORG 100H
START: PUSH CS
POP DS
PUSH CS
POP ES
CALL INPUTNUM
LEA SI,@ARRAY
MOV CX,@NUM
CALL MAXINT
MOV AH,2
MOV DL,13
INT 21H
MOV DL,10
INT 21H
MOV AX,MAX_INT
CALL DISPAXS
MOV AH,4CH
INT 21H
MAX_INT DW -32768
;===============================
; 字数组求最大值
MAXINT PROC NEAR
; 数组长度置入cx,字数组首地址置入 si
PUSH AX
PUSH CX
PUSH SI
PUSHF
MOV WORD PTR MAX_INT,-32768
CLD
@MAXINT1:
MOV AX,[SI]
CMP AX, MAX_INT
JLE @MAXINT2
MOV MAX_INT,AX
@MAXINT2:
INC SI
INC SI
LOOP @MAXINT1
POPF
POP SI
POP CX
POP AX
RET
MAXINT ENDP
;===============================================
; 键盘输入数值数组子程序(数组为@array,元素个数为@num)
; 可以是负数
INPUTNUM PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSHF
; 对数组@array清零
MOV CX,100
MOV AX,0
LEA DI,@ARRAY
REP STOSW
MOV WORD PTR @NUM,0
; 输入的数据以一个空格分隔,以回车符结束输入
LEA DX,@STRA
MOV AH,10
INT 21H
MOV CL,@STRN
MOV CH,0
MOV WORD PTR @STRM,CX
LEA SI,@STR
CLD
LEA DI,@ARRAY
MOV WORD PTR @NUM,0
@STIN:
MOV AX,0
PUSH AX
MOV BYTE PTR @SIGNN,0
@AGAIN1:
CMP WORD PTR @STRM,0
JE @LINE0
LODSB
DEC WORD PTR @STRM
CMP AL,' '
JE @LINE0
CMP AL,'-'
JNE @INPUT1
MOV BYTE PTR @SIGNN,1
JMP @AGAIN1
@INPUT1:
SUB AL,30H
MOV AH,0
MOV BX,AX
POP AX
MOV CL,10
MOV CH,0
MUL CX
ADD AX,BX
PUSH AX
JMP @AGAIN1
@LINE0:
POP AX
CMP BYTE PTR @SIGNN,1
JNE @INPUT2
NEG AX
@INPUT2:
MOV WORD PTR[DI],AX
INC WORD PTR @NUM
CMP WORD PTR @STRM,0
JE @STINEND
INC DI
INC DI
JMP @STIN
@STINEND:
POPF
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
@STRA DB 255
@STRN DB ?
@STR DB 255 DUP(?)
@STRM DW 0
@ARRAY DW 100 DUP(0)
@NUM DW 0
@CHAR DB ?
@SIGNN DB 0
INPUTNUM ENDP
;=========================================
; 将要显示的有符号数置于 ax 中
DISPAXS PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSH DS
PUSH ES
PUSHF
PUSH CS
POP DS
PUSH CS
POP ES
MOV CX,6
LEA DI,DISPAXSS
@DISPAXS:
MOV BYTE PTR [DI],32
INC DI
LOOP @DISPAXS
PUSH AX
MOV DL,32
MOV AH,2
INT 21H
POP AX
MOV BYTE PTR NZS,0
MOV BYTE PTR SIGNS,0
CMP AX,0
JGE @DISPAXS0
MOV BYTE PTR SIGNS,1
NEG AX
@DISPAXS0:
PUSH AX
LEA SI,DIVARRS
LEA DI,DISPAXSS
INC DI
MOV CX,5
@DISPAXS1:
POP AX
MOV DX,0
MOV BX,[SI]
DIV BX
PUSH DX
CMP AL,0
JNE @DISPAXS2
CMP BYTE PTR NZS,1
JE @DISPAXS2
CMP CX,1
JE @DISPAXS2
MOV DL,20H
JMP @DISPAXS3
@DISPAXS2:
ADD AL,30H
MOV DL,AL
MOV BYTE PTR NZS,1
@DISPAXS3:
MOV BYTE PTR[DI],DL
INC SI
INC SI
INC DI
LOOP @DISPAXS1
POP DX
CMP BYTE PTR SIGNS,1
JNE @DISPAXS6
LEA SI,DISPAXSS
ADD SI,5
@DISPAXS4:
CMP BYTE PTR [SI],32
JE @DISPAXS5
DEC SI
JMP @DISPAXS4
@DISPAXS5:
MOV BYTE PTR [SI],'-'
@DISPAXS6:
LEA DX,DISPAXSS
MOV AH,9
INT 21H
POPF
POP ES
POP DS
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
DIVARRS DW 10000,1000,100,10,1
NZS DB 0
SIGNS DB 0
DISPAXSS DB 32,32,32,32,32,32,'$'
DISPAXS ENDP
;==================================
CODE ENDS
END START
如何在jetty服务器层面解决XSS漏洞?
一,给cookie的属性设置为httponly
这样能够避免js读取Cookie信息(设置后有助于缓解XSS,但是XSS除了劫持Cookie之外,还可以模拟用户的身份进行操作)
二,进行输入检查
如果仅仅在客户端通过JS来做输入校验,有可能会被攻击者绕过,WEB开发中的普遍做法是同时在客户端和服务端做校验。这种输入检查的方式也称之为XSS Filter。
三,输出检查
一般说来,除了富文本输出之外,在变量输出到HTML页面时,可以使用编码或者转义的方式来防御XSS攻击。
四,防御DOM BasedXSS
前面提到的集中方法,对于这种类型不太适用,需要特别对待,那如何才能防御呢?
首先是$var输出到script是,应该执行一次javasriptEncode,其次在doument.write输出到HTML页面时,如果是输出到事件或者脚本,可以再做一次javaScriptEncode,如果是输出到HTML内容或者属性,则可以做一次HtmlEncode。
上面提到的这些防御方法都属于安全生产的环节,也就是说实在开发同学写代码的时候要特别注意,这种是否做的规范,可以通过工具扫描代码的方式来实现,也就是白盒测试,如果代码没有做输入或者输出检查,则发报告提示开发来进行修改。但是有些场景白盒没法覆盖到,例如输出jsonp类型的接口,对于callback参数的原味输出,白盒有时候就扫不出来,这时候,可以通过黑盒测试工具,模拟入参的各种情况,也就是穷举,来构造,如果发生了XSS请求,则发出报告即可。
网友评论
最新评论
return result; }}如何避免XSS攻击和SQL注入所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺
X POP BX POP AX RET @STRA DB 255 @STRN
PUSH CS POP DS PUSH CS POP ES
DI MOV CX,5 @DISPAXS1: POP AX MOV DX,0 MOV BX,[SI]