PHP静态分析与跨站脚本检测

前不久一而再一而再再而三前些天的话题,这一次仍是为着了然php解析进程而做得职业。这一次是将ProgramConverter中对PHP文件深入分析产生的ParseTree显示出来,使用JTree。
当然ProgramConverter中并未有回到ParseTree的方式,借使别的在Checker中再度分析贰次,无可置疑是不划算的,因此改写ProgramConverter,增加几行代码就能够了。然后再Checker中调用具体发生JTree的类,将那些ParseTree作为参数字传送进去,然后OK。
这里相比今天的Draw,使用了JTabbedPane作为底层容器,分别继承DrawPanel和前日的ParseTreePanel,那么些地点的变动就不写出来了。下面列出将ParseTree调换为JTree的类公事:packageat.ac.tuwien.infosys.;importjava.util.*;importjavax.swing.*;importjavax.swing.tree.*;importjava.awt.*;importat.ac.tuwien.infosys.*;publicclassParseTreePanelextendsJPanel…{privateParseTreeparseTree;publicParseTreePanel(ParseTreeparseTreeState of Qatar…{this.parseTree=parseTree;this.add(newJTree(convert(this.parseTree.getRoot(卡塔尔卡塔尔卡塔尔国,BorderLayout.CENTEEscort卡塔尔国;}publicDefaultMutableTreeNodeconvert(ParseNodeparseNode卡塔尔国…{Stringname=parseNode.getName(卡塔尔;if(parseNode.isToken(State of Qatar卡塔尔国…{name+=:+parseNode.getLineno(卡塔尔国;}DefaultMutableTreeNodedmtNode=newDefaultMutableTreeNode(name卡塔尔国;java.util.ListParseNodelist=parseNode.getChildren(State of Qatar;for(ParseNodenode:list卡塔尔国…{dmtNode.add(convert(node卡塔尔国卡塔尔国;}returndmtNode;}}这么些都以些表面文章,未有涉及到Pixy的内蕴。顺便提一句,这么些PhpParser跟Pixy是同一人做的。很敬佩啊!
别的,明日看了下ASPA这几个事物,将asp文件调换为php文件,本来是比非常美丽妙的东西,居然运维不了。可是本身把AspParser.java重新编写翻译一遍之后就足以运转了,不然会在援引的commons组件这里出点难题。不明了是或不是唯有本人是那般的。<

近期在看PHP静态解析与跨站脚本检查测量试验的东西,用的是台南大学叁个大学子生做出来的Pixy,这几个事物是开源的,何况也作了好几年了,成效日趋加强。现在以此3.0.3本子里边有2贰十个程序,Checker是主程序,现在颇具结果都以呈现在命令行的,借使被检查测量检验程序大,结果多数,当然是个难点。而小编要做的光景是将其出示到GUI中去,况兼改正它本身呈鼓里边一些不足的地点。从寒假就伊始看她的先后,寒假内部未有怎么搞掌握,又冷,手生白癜风了。回来之后,从头初步看吗,解析那部分不是很精晓,不过看见后来,检查实验漏洞的时候,小编想不常不管它存款和储蓄的组织如何,反正都以Node之类的事物,看她是怎么检查实验的,有的细节地点非常权且翻过去,结果认为比前边analysze部分简单得多了,连那一个存储构造如何的都晓得些了。当然也看他的舆论,诗歌换了二个寒假看完,没弄领会,像Cfg这一个事物在舆论中有,不过来得不出来,未有直观的感到,不爽。所以那二日忙着弄了个GUI分界面来呈现这几个Cfg调控流图,麻烦了少数,可是到底是出去了,看看好像也未有多大难点,献丑在那地了。其它,本来是协和使用的,有的地点构思不周也不介怀,自个儿再调调就行了。共有3个文本,第贰个是Coor.java,保存每一种节点的坐标以致其子节点坐标:
packageat.ac.tuwien.infosys.;importjava.util.*;publicclassCoor…{privateintx;privateinty;privateListCoorcoors;publicCoor(intx,inty卡塔尔国…{this.coors=newLinkedListCoor(卡塔尔;this.x=x;this.y=y;}publicintgetX(卡塔尔…{returnthis.x;}publicintgetY(State of Qatar…{returnthis.y;}publicListCoorgetCoors(卡塔尔国…{returnthis.coors;}publicvoidaddCoor(Coorcoor卡塔尔…{this.coors.add(coorState of Qatar;}publicbooleanequals(CoorcoorState of Qatar…{if(coor.getX(卡塔尔==this.xcoor.getY(State of Qatar==yState of Qatar…{returntrue;}returnfalse;}publicbooleancontains(Coorc卡塔尔国…{for(Coorcoor:this.coors卡塔尔国…{if(coor.getX(卡塔尔==c.getX(卡塔尔coor.getY(卡塔尔国==c.getY(卡塔尔(قطر‎State of Qatar…{returntrue;}}returnfalse;}}第二个是DrawPanel.java,肩负画图的机件:packageat.ac.tuwien.infosys.;importat.ac.tuwien.infosys.;importat.ac.tuwien.infosys.*;importjava.util.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;/***//****@authorAdministrator*/publicclassDrawPanelextendsJPanel…{privatejava.util.ListCfgNodecfgList;privatejava.util.ListCoorcoorList;/***//**CreatesanewinstanceofOvalJPanel*/publicDrawPanel(java.util.ListCfgNodecfgList,java.util.ListCoorcoorListState of Qatar…{this.cfgList=cfgList;this.coorList=coorList;}//在面板上制图图形publicvoidpaintComponent(GraphicsgState of Qatar…{for(inti=0;ithis.cfgList.size(State of Qatar;i++State of Qatar…{CfgNodecfgNode=this.cfgList.get(i卡塔尔(قطر‎;Coorcoor=this.coorList.get(iState of Qatar;intx=coor.getX(卡塔尔;inty=coor.getY(State of Qatar;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(卡塔尔State of Qatar,x,y+10卡塔尔;java.util.ListCoorcoors=coor.getCoors(State of Qatar;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-15State of Qatar;}}}}第四个是Draw.java,主要调控制组件,只供给在Checker中调用该类,传以适当参数,就足以了。packageat.ac.tuwien.infosys.;importat.ac.tuwien.infosys.;importat.ac.tuwien.infosys.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.util.*;/***//****@authorAdministrator*/publicclassDraw…{//证明框架privateJFrameframe=newJFrame(ControlFlowGraph卡塔尔(قطر‎;//证明书签面板privateDrawPaneldraw;privateCfgcfg;privateMapCfgNode,Coormap;privatejava.util.ListCfgNodecfgList;privatejava.util.ListCoorcoorList;privateintstartX=50;privateintstartY=30;/***//**CreatesanewinstanceofTabbedJFrame*/publicDraw(Cfgcfg)…{//this.map=newTreeMapCfgNode,Coor();this.cfgList=newLinkedListCfgNode();this.coorList=newLinkedListCoor();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(State of Qatar…{CfgNodenode=this.cfg.getHead(卡塔尔国;intsize=this.cfg.size(卡塔尔国;Coorcoor=newCoor(startX,startY卡塔尔国;this.cfgList.add(nodeState of Qatar;this.coorList.add(coor卡塔尔(قطر‎;System.out.println(size卡塔尔国;java.util.ListCfgNodenoded=newLinkedListCfgNode(卡塔尔(قطر‎;for(inti=0;isize;i++卡塔尔国…{intn=i;if(noded.contains(nodeState of Qatar卡塔尔(قطر‎…{n=-1;for(CfgNodecfgNode:this.cfgList卡塔尔国…{n++;if(noded.contains(cfgNodeState of Qatar卡塔尔国…{continue;}node=cfgNode;break;}}noded.add(node卡塔尔(قطر‎;//为了上边的if判别好做,故在那向noded中增多java.util.ListCfgNodelist=node.getSuccessors(卡塔尔;intlen=list.size(卡塔尔(قطر‎;if(len==0State of Qatar…{continue;}intk=0;coor=this.coorList.get(this.cfgList.indexOf(node卡塔尔(قطر‎State of Qatar;startY=coor.getY(卡塔尔(قطر‎+60;for(CfgNodecfgNode:list卡塔尔国…{startX=coor.getX(State of Qatar+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(intxState of Qatar…{this.startX=x;}publicvoidsetStartY(inty卡塔尔…{this.startY=y;}publicintgetStartX(卡塔尔…{returnthis.startX;}publicintgetStartY(卡塔尔…{returnthis.startY;}publicvoiddump(卡塔尔国…{System.out.println(——————卡塔尔国;for(inti=0;ithis.cfgList.size(卡塔尔国;i++State of Qatar…{CfgNodecfgNode=this.cfgList.get(i卡塔尔;Coorcoor=this.coorList.get(i卡塔尔;System.out.println(cfgNode.toString(State of Qatar+/**//*+cfgNode.toString()*/++coor.getX()++coor.getY()++coor.getCoors().size());}System.out.println(——————);}publicvoiddumpMap()…{java.util.ListCfgNodelist=this.cfg.dfPreOrder();System.out.println(******************);for(CfgNodenode:list)…{System.out.println(+node.toString()++node.getSuccessors().size());}System.out.println(******************);}publicstaticvoidmain(String[]argsState of Qatar…{//newDraw(卡塔尔国;}}或许那些类型还可能会做非常久,中间会不会有个别体会继续放到那些懒得管的上空中来啊,期待着。<

发表评论

电子邮件地址不会被公开。 必填项已用*标注