数组XSS校验-针对xss输入校验

第三方分享代码
hacker 2年前 (2022-09-11) 破解服务 197 4

目录介绍:

汇编语言程序设计,实现两个数组的合并.设数组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请求,则发出报告即可。

相关推荐

网友评论

  • (*)

最新评论

  • 访客 2022-09-11 09:29:59 回复

    return result; }}如何避免XSS攻击和SQL注入所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺

    1
  • 访客 2022-09-11 01:35:48 回复

    X              POP       BX              POP       AX              RET       @STRA  DB        255       @STRN

    2
  • 访客 2022-09-11 07:53:21 回复

        PUSH      CS              POP       DS              PUSH      CS              POP       ES          

    3
  • 访客 2022-09-11 09:23:04 回复

      DI              MOV       CX,5  @DISPAXS1:              POP       AX              MOV       DX,0              MOV       BX,[SI]              

    4