2015-05-27 3 views
0
public class AttackName { 

    /** 
    * @param args the command line arguments 
    */ 
    DatacenterBroker broker; 
    String fname, lname1, card; 

    public DatacenterBroker attack(String path, String fname, String lname) { 
     try { 


      String filepath = path; 
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse(filepath); 
      doc.getDocumentElement().normalize(); 
      System.out.println("attacker doing attack"); 
      System.out.println("xpath query #1"); 


      XPathFactory xpf = XPathFactory.newInstance(); 
      XPath xpath = xpf.newXPath(); 
      XPathExpression expr = xpath.compile("//employee[firstname/text()='"+fname+"']/credit_card/text()"); 

      Object res = expr.evaluate(doc, XPathConstants.NODESET); 

      NodeList nodes = (NodeList) res; 
      for (int i = 0; i < nodes.getLength(); i++) { 
       card = nodes.item(i).getNodeValue(); 

      } 

      XPathFactory xpf1 = XPathFactory.newInstance(); 
      XPath xpath1 = xpf1.newXPath(); 
      XPathExpression expr1 = xpath1.compile("//employee[firstname/text()='"+fname+"']/lastname/text()"); 

      Object res1 = expr1.evaluate(doc, XPathConstants.NODESET); 

      NodeList nodes1 = (NodeList) res1; 
      for (int i = 0; i < nodes1.getLength(); i++) { 
       lname1 = nodes1.item(i).getNodeValue(); 

      } 

      System.out.println("attacker doing attack"); 
      System.out.println("xpath query #2"); 
      xpf = XPathFactory.newInstance(); 
      xpath = xpf.newXPath(); 
      expr = xpath.compile("//employee[firstname/text()='efg' ]/credit_card/text()"); 

      res = expr.evaluate(doc, XPathConstants.NODESET); 

      nodes = (NodeList) res; 
      for (int i = 0; i < nodes.getLength(); i++) { 
       System.out.println(nodes.item(i).getNodeValue()); 
      } 

      System.out.println("attacker doing attack"); 

      System.out.println("xpath query #3"); 
      xpf = XPathFactory.newInstance(); 
      xpath = xpf.newXPath(); 
      expr = xpath.compile("//employee[firstname/text()='"+fname+"' and lastname/text()='']/credit_card/text()"); 

      } 

      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return broker; 
    } 

    public String getLname(){   
     return lname1; 
    } 

    public String getCard(){ 
     return card; 
    } 
} 

Я делаю атаку инъекции xpath? У меня есть код со мной. Я хочу понять код. Остальное в порядке. но я хочу знать, что в этом коде означает строка String getLname() и String getcard()?Что означает String getname()?

благодарит заранее.

ответ

0

Эти два метода:

public String getLname() 
public String getCard() 

дают возможность классов других пакетов, чтобы иметь возможность получения или чтения атрибуты lname и card вашего класса.


Давайте лучше объясним. Сначала проверьте эту таблицу:

Уровни доступа

Modifier Class Package Subclass World 
public  Y  Y  Y   Y 
protected Y  Y  Y   N 
no modifier Y  Y  N   N 
private  Y  N  N   N 

У вас нет модификатора в:

String fname, lname1, card; 

Так это атрибуты видимы только в своем классе и другие в одном пакете.

Эти методы называются getters, и у них есть братья, setters. Это nice practice: вы заявляете свои поля класса как частные:

private String myAttribute; 

и Гранд защищенного доступа и изменения ваших атрибутов, вы можете поставить проверки, проверки и ничего делать дополнительно вы хотите:

public String getMyAttribute() { 
    // safe return (if null returns "") 
    return this.myAttribute == null ? "" : this.myAttribute; 
} 

public void setMyAttribute(String myAttribute) { 
    // validations 
    if (myAttribute.startsWith("My") { 
     this.myAttribute = myAttribute; 
    } else { 
     this.myAttribute = "My" + myAttribute; 
    } 
} 
+0

Castila эти геттеры выбирают lname и fname? и нужно ли иметь сеттеры в том же классе – Gungun

+0

проверить мое редактирование, а) они не собираются, они делают lname и карту видимыми для других участников вашего проекта в разных пакетах. b) вам нужно только поставить «сеттеры», если вы хотите, чтобы другие классы могли изменять ваши атрибуты. –

+1

thanku so much ..... :) – Gungun

0

Мне кажется, что каждый брокер в системе может иметь определенное имя и карту, связанную с их пользователем. Я не уверен, что такое «карта», но все функции - это вернуть строку. Я думаю, что имя и карта должны быть установлены где-то еще в системе, и они используются в функции атаки в определенных точках, чтобы изменить то, что происходит с каким пользователем. Функция атаки не имеет большого смысла для меня, поскольку есть три блока почти повторяющегося кода, но не против меня ...

0

String getLname() и String getCard() переменные-члены-реципиенты. Однако в этом фрагменте кода они могут не быть инициализированы, то есть если файл не содержит достоверных данных, оба возвращают null.

Смежные вопросы