电脑安全

您当前的位置:主页 > 电脑安全 >

PHP静态分析与跨站脚本检测-网络编程

来源:[db:来源]标题:   都是    编辑:电脑技术全能网 时间:2019-09-19 12:34

原标题:PHP静态分析与跨站脚本检测-网络编程
   近来在看PHP动态剖析与跨站剧本检测的货色,用的是维也纳大学一个博士生做进去的Pixy,这个货色是开源的,并且也作了好几年了,功效逐步加强。当初这个3.0.3版本里边有225个顺序,Checker是主顺序,当初全部成果都是表现在下令行的,假如被检测顺序大,成果许多,固然是个成绩。而我要做的大略是将其表现到GUI中去,而且改良它自身呈鼓里边一些缺乏的处所。从暑假就开端看他的顺序,暑假里边没有怎样搞清楚,又冷,手生冻疮了。返来当前,重新开端看吧,剖析那一局部不是很清楚,然而看到厥后,检测破绽的时间,我想临时不论它存储的构造甚么,横竖都是Node之类的货色,看他是怎样检测的,有的细节处所谁人临时翻从前,成果感到比前边analysze局部简略很多了,连那些存储构造甚么的都清楚些了。固然也看他的论文,论文换了一个暑假看完,没弄清楚,像Cfg这些货色在论文中有,然而表现不进去,没有直观的感到,不爽。以是这两天忙着弄了个GUI界面来表现这个Cfg操纵流图,费事了一点,不外总算是进去了,看看似乎也没有多大成绩,献丑在这里了。别的,原来是本人应用的,有的处所斟酌不周也无所谓,本人再调调就行了。共有3个文件,第一个是Coor.java,保留每个节点的坐标以及其子节点坐标: packageat.ac.tuwien.infosys.www.pixy;importjava.util.*;publicclassCoor...{privateintx;privateinty;privateList<Coor>coors;publicCoor(intx,inty)...{this.coors=newLinkedList<Coor>();this.x=x;this.y=y;}publicintgetX()...{returnthis.x;}publicintgetY()...{returnthis.y;}publicList<Coor>getCoors()...{returnthis.coors;}publicvoidaddCoor(Coorcoor)...{this.coors.add(coor);}publicbooleanequals(Coorcoor)...{if(coor.getX()==this.x&&coor.getY()==y)...{returntrue;}returnfalse;}publicbooleancontains(Coorc)...{for(Coorcoor:this.coors)...{if(coor.getX()==c.getX()&&coor.getY()==c.getY())...{returntrue;}}returnfalse;}}第二个是DrawPanel.java,担任绘图的组件:packageat.ac.tuwien.infosys.www.pixy;importat.ac.tuwien.infosys.www.pixy.conversion.Cfg;importat.ac.tuwien.infosys.www.pixy.conversion.nodes.*;importjava.util.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;/***//****@authorAdministrator*/publicclassDrawPanelextendsJPanel...{privatejava.util.List<CfgNode>cfgList;privatejava.util.List<Coor>coorList;/***//**CreatesanewinstanceofOvalJPanel*/publicDrawPanel(java.util.List<CfgNode>cfgList,java.util.List<Coor>coorList)...{this.cfgList=cfgList;this.coorList=coorList;}//在面板上绘制图形publicvoidpaintComponent(Graphicsg)...{for(inti=0;i<this.cfgList.size();i++)...{CfgNodecfgNode=this.cfgList.get(i);Coorcoor=this.coorList.get(i);intx=coor.getX();inty=coor.getY();g.setColor(Color.red);g.drawOval(x-50,y-15,100,30);g.setColor(Color.blue);g.drawString(cfgNode.toString(),x-30,y-5);g.drawString("Loc:"+String.valueOf(cfgNode.getOrigLineno()),x,y+10);java.util.List<Coor>coors=coor.getCoors();for(Coorc:coors)...{intcx=c.getX();intcy=c.getY();g.setColor(Color.black);if(c.equals(coor))...{g.setColor(Color.yellow);}g.drawLine(x,y+15,cx,cy-15);}}}}第三个是Draw.java,主操纵组件,只要要在Checker中挪用该类,传以恰当参数(Cfg),便可以了。packageat.ac.tuwien.infosys.www.pixy;importat.ac.tuwien.infosys.www.pixy.conversion.Cfg;importat.ac.tuwien.infosys.www.pixy.conversion.nodes.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.util.*;/***//****@authorAdministrator*/publicclassDraw...{//申明框架privateJFrameframe=newJFrame("ControlFlowGraph");//申明书签面板privateDrawPaneldraw;privateCfgcfg;privateMap<CfgNode,Coor>map;privatejava.util.List<CfgNode>cfgList;privatejava.util.List<Coor>coorList;privateintstartX=50;privateintstartY=30;/***//**CreatesanewinstanceofTabbedJFrame*/publicDraw(Cfgcfg)...{//this.map=newTreeMap<CfgNode,Coor>();this.cfgList=newLinkedList<CfgNode>();this.coorList=newLinkedList<Coor>();this.cfg=cfg;}publicvoidshow()...{frame.add(newJScrollPane(newDrawPanel(this.cfgList,this.coorList)),BorderLayout.CENTER);frame.setSize(1000,1000);frame.setLocation(50,50);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}/***//***将Cfg转换为cfgList和coorList.*/publicvoidconvert()...{CfgNodenode=this.cfg.getHead();intsize=this.cfg.size();Coorcoor=newCoor(startX,startY);this.cfgList.add(node);this.coorList.add(coor);System.out.println(size);java.util.List<CfgNode>noded=newLinkedList<CfgNode>();for(inti=0;i<size;i++)...{intn=i;if(noded.contains(node))...{n=-1;for(CfgNodecfgNode:this.cfgList)...{n++;if(noded.contains(cfgNode))...{continue;}node=cfgNode;break;}}noded.add(node);//为了上边的if推断好做,故在此向noded中增加java.util.List<CfgNode>list=node.getSuccessors();intlen=list.size();if(len==0)...{continue;}intk=0;coor=this.coorList.get(this.cfgList.indexOf(node));startY=coor.getY()+60;for(CfgNodecfgNode:list)...{startX=coor.getX()+k*250;k++;if(this.cfgList.contains(cfgNode))...{Coorc=(Coor)this.coorList.get(this.cfgList.indexOf(cfgNode));if(!coor.contains(c))...{coor.addCoor(c);}continue;}coor.addCoor(newCoor(startX,startY));this.cfgList.add(cfgNode);this.coorList.add(newCoor(startX,startY));}node=list.get(0);//这里取到的CfgNode能够曾经剖析过了,经过上边的if推断能够从cfgList中别的取一个。}}publicvoidsetStartX(intx)...{this.startX=x;}publicvoidsetStartY(inty)...{this.startY=y;}publicintgetStartX()...{returnthis.startX;}publicintgetStartY()...{returnthis.startY;}publicvoiddump()...{System.out.println("------------------");for(inti=0;i<this.cfgList.size();i++)...{CfgNodecfgNode=this.cfgList.get(i);Coorcoor=this.coorList.get(i);System.out.println(cfgNode.toString()+""/**//*+cfgNode.toString()*/+""+coor.getX()+""+coor.getY()+""+coor.getCoors().size());}System.out.println("------------------");}publicvoiddumpMap()...{java.util.List<CfgNode>list=this.cfg.dfPreOrder();System.out.println("******************");for(CfgNodenode:list)...{System.out.println(""+node.toString()+""+node.getSuccessors().size());}System.out.println("******************");}publicstaticvoidmain(String[]args)...{//newDraw();}}能够这个名目还会做良久,旁边会不会有些心得持续放到这个懒得管的空间中来呢,等待着。<

上一篇:Windows 下的 PHP 扩展编程-网络编程

下一篇:没有了