<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    狼愛上貍

    我胡漢三又回來了

    #

    Java的Build工具—Ant應用指南

    本文以最新發布的Ant 1.5.1為例,介紹這款優秀的Build工具的安裝配置、基本應用和一些高級話題。最新的Ant下載地址是 http://jakarta.apache.org/ant/

    Ant是一種基于Java的Build工具。理論上來說,它有些類似于C中的make,但比make優越。現在存在的大多數Build工具,如make、gnumake、nmake、jam等都存在這樣或那樣的不足,比如依賴于特定的平臺、配置文件過于復雜或者對格式無法檢查而容易出錯等。與這些工具相比較,Ant的兩個特性決定了它是一款優秀的Build工具:

    1. 基于Java的實現。具有良好的跨平臺性,同時可以通過增加新的Java類來擴展Ant的功能,而無需去了解不同平臺上不同的腳本語言。

    2.基于XML的配置文件。Ant以XML樹來描述Target/Task的關系,文件結構清晰、易讀易寫,并且利用XML對格式的控制來避免由于配置文件的錯誤造成的Build操作失敗。

    安裝與配置

    Ant的安裝非常簡單,把從網上下載的jakarta-ant-1.5.1-bin.zip解開到一個目錄下即可(以下假定安裝在目錄D:\jakarta-ant-1.5.1)。接下來需要進行環境變量配置:

    SET ANT_HOME=D:\jakarta-ant-1.5.1 //注意是Ant的安裝目錄,不是bin子目錄
    SET PATH=%PATH%;%ANT_HOME%\bin;


    在配置環境變量之前,請確認已經正確設置了JAVA_HOME系統變量。輸入ant命令,看到如下輸出說明已成功安裝了Ant工具:

    Buildfile: build.xml does not exist!
    Build failed


    提示信息表明在當前目錄不存在build.xml配置文件,但這本身已經說明Ant成功運行了。

    快速入門

    下面用一個最簡單也是最經典的例子-HelloWorld來感受一下Ant吧。

    //HelloWorld.java
    package com.sharetop.antdemo;
    public class HelloWorld {
    public static void main( String args[] ) {
    System.out.println("Hello world. ");
    }
    }


    要讓Ant編譯這個文件,首先需要編寫一個Build配置文件。在一般情況下,這個文件被命名為build.xml。

    <?xml version="1.0" encoding="UTF-8" ?>
    <project name="HelloWorld" default="run" basedir="." >
    <property name="src" value="src"/>
    <property name="dest" value="classes"/>
    <property name="hello_jar" value="hello.jar" />
    <target name="init">
    <mkdir dir="${dest}"/>
    </target>
    <target name="compile" depends="init">
    <javac srcdir="${src}" destdir="${dest}"/>
    </target>
    <target name="build" depends="compile">
    <jar jarfile="${hello_jar}" basedir="${dest}"/>
    </target>
    <target name="run" depends="build">
    <java classname="com.sharetop.antdemo.HelloWorld" classpath="${hello_jar}"/>
    </target>
    </project>


    來看一下這個文件的內容,它描述了以下信息:工程的名字為HelloWorld,工程有四個target,分別是init、compil、build和run,缺省是run。compile只有一個任務javac,源文件位于src目錄下,輸出的類文件要放在classes目錄下。build的任務是jar,生成的jar文件為hello.jar,它打包時以classes為根目錄。而run則是執行這個HelloWorld類,用hello.jar作為classpath。這四個target之間有一個依賴關系,這種關系用depends來指定。即如果Target A依賴于Target B,那么在執行Target A之前會首先執行Target B。所以從下面運行缺省Target(run)的輸出看,這四個Target的執行順序是:init→compile→build→run。文件目錄結構如圖1所示。HelloWorld.java文件在src\com\sharetop\antdemo子目錄下。
    在命令行輸入命令:ant,然后運行,可以看到如下輸出:

    如果配置文件名不是build.xml,比如是build_front.xml,那么,可以使用-buildfile命令參數指定:

    G:\myDoc\ant_demo>ant -buildfile build_front.xml


    也可以單獨執行指定的某個target,比如,只編譯不打包執行,可以使用下面輸入命令即可:

    G:\myDoc\ant_demo>ant compile

    在相應的目錄下會找到編譯出的HelloWorld.class文件。

    再看看上面的build.xml配置文件,文件開頭定義了3個屬性,分別指定了源文件輸出路徑、類文件輸出路徑和生成的Jar文件名,后面對這些路徑的引用都通過一個${property name}來引用。所以,要注意這樣一個原則“目錄的定義與目錄的引用應該分開”。
    基本應用

    建立工程的目錄

    一般要根據工程的實際情況來建立工程的目錄結構。但是,有一些比較通用的組織形式可供參考,比如所有的jakarta項目都使用類似的目錄結構。下面讓我們來看一下這種目錄結構的特點。

    表1

    目錄 文件
    bin 公共的二進制文件,以及運行腳本
    build 臨時創建的文件,如類文件等
    dist 目標輸出文件,如生成Jar文件等。
    doc/javadocs 文檔。
    lib 需要導出的Java包
    src 源文件

    對于一個簡單的工程,一般包括表1的幾個目錄。其中bin、lib、doc和src目錄需要在CVS的控制之下。當然在這樣的目錄結構上,也可以做一些調整,例如,可以建立一個extra目錄來放置需要發布的Jar文件、Inf文件及圖像文件等。同樣,如果開發Web應用可以建立一個Web目錄放置JSP、HTML等文件。

    如果我們開發的是一個比較復雜的項目,包括多個子項目,并且各個子項目是由不同的開發人員來完成的,那么要如何來設計它的目錄結構?首先有一點是需要確定的,不同的子項目應該擁有不同的Build文件,并且整個項目也應該有一個總的Build文件。可以通過Ant任務或是AntCall任務調用子項目的Build文件,如下例:

    <target name="core" depends="init">
    <ant dir="components" target="core"/>
    <ant dir="waf/src" target="core"/>
    <ant dir="apps" target="core"/>
    </target>


    在各個子項目的耦合不是非常緊密的情況下,各個子項目應該有各自獨立的目錄結構,也就是說它們可以有自己的src、doc、build、dist等目錄及自己的build.xml文件,但是可以共享lib和bin目錄。而對于那些耦合緊密的子項目,則推薦使用同一個src目錄,但是不同的子項目有不同的子目錄,各個子項目的build.xml文件可以放在根目錄下,也可以移到各個子項目的目錄下。

    編寫Build文件

    要用好Ant工具,關鍵是要編寫一個build.xml文件。要編寫出一個結構良好、靈活可擴展的Build文件,有兩個問題要考慮,一是了解Build文件的基本結構,二是了解Ant定義的大量任務。

    Ant的Build文件是一個標準的XML文件,它包含一個根節點Project,每個Project定義了至少一個或多個Target,每個Target又是一系列Task的集合。它們之間的關系如圖2所示。
    每個Task是一段可被執行的代碼,比如,前例中的javac、jar就是兩個最常用的Task。Ant定義了大量的核心Task,我們要考慮的第二個問題正是如何去掌握這大量的Task。其實唯一的方法就是邊學習邊實踐,這方面最好的參考就是官方的Ant使用手冊。

    外部文件的使用

    使用外部的Property文件可以保存一些預設置的公共屬性變量。這些屬性可以在多個不同的Build文件中使用。

    可以將一個外部的XML文件導入Build文件中,這樣多個項目的開發者可以通過引用來共享一些代碼,同樣,這也有助于Build文件的重用,示例代碼如下所示:

    <!DOCTYPE project [
    <!ENTITY share-variable SYSTEM "file:../share-variable.xml">
    <!ENTITY build-share SYSTEM "file:../build-share.xml">
    ]>
    <project name="main" default="complie" basedir=".">
    &share-variable;
    &build-share;
    ... ...


    在J2EE項目中的應用

    只要掌握了Ant的使用方法,在J2EE項目中的應用與在其它項目中的應用并沒有太大的不同,但是仍有幾點是需要注意的。

    一是要清楚War和Jar文件的目錄結構,主要是War的配置文件web.xml文件的位置和EJB的配置文件(ejb-jar.xml和weblogic-ejb-jar.xml等)的位置,在調用Jar任務打包文件時一定要記得把它們也包含進來。一般在編譯之前就要注意把這些需打包的文件拷入相應目錄下。二是在J2EE項目中可能會涉及到一些特殊的任務,比如在Weblogic中會調用ejbc預編譯EJB的代碼存根,或者需要在Ant中同時發布Jar到相應的服務器中等。可以用兩種途徑實現這些任務,一是擴展Ant任務實現這些任務,二是直接用Java任務來執行這些命令。下面是打包、發布一個EJB的build.xml配置文件片斷,代碼如下:

    <target name="deploy_HelloEJB" depends="compile">
    <delete dir="${temp}/ejb_make"/> <!-- 首先刪除臨時目錄 -->
    <delete file="${temp}/helloEJB.jar"/>
    <!-- 刪除WebLogic域中老版本的EJB -->
    <delete file="${weblogic.deploy.dest}/helloEJB.jar"/>
    <!-- 創建META-INF目錄,放置ejb-jar.xml和weblogic-ejb-jar.xml -->
    <mkdir dir="${temp}/ejb_make/META-INF"/>
    <!-- 拷貝ejb-jar.xml和weblogic-ejb-jar.xml 到臨時目錄-->
    <copy todir="${temp}/ejb_make/META-INF">
    <fileset dir="etc/baseinfo">
    <include name="*.xml"/>
    </fileset>
    </copy>
    <!-- 拷貝所有的helloEJB類到臨時目錄 -->
    <copy todir="${temp}/ejb_make/">
    <fileset dir="${dest.classes}/"> <!-- dest.classes是輸出的類文件目錄 -->
    <include name="${dest.classes}/helloEJB/**"/>
    </fileset>
    </copy>
    <!-- 將所有這些文件打包成helloEJB.jar -->
    <jar jarfile="${temp}/helloEJB.jar" basedir="${temp}/ejb_make"/>
    <!-- 進行weblogic.ejbc編譯 -->
    <java classpath="${wl_cp}" classname="weblogic.ejbc" fork="yes" >
    <classpath>
    <fileset dir="lib">
    <include name="*.jar" />
    </fileset>
    </classpath>
    <arg value="${temp}/helloEJB.jar" />
    <arg value="${temp}/helloEJB_deploy.jar" />
    </java>
    <!-- 拷貝/發布到WebLogic的{DOMAIN}\applications目錄 -->
    <copy file="${temp}/helloEJB_deploy.jar" todir="${weblogic.deploy.dest}"/>
    </target>


    用Ant配合JUnit實現單元測試

    Ant 提供了JUnit任務,可以執行單元測試代碼。如何使用JUnit,以及如何編寫測試用例(TestCase),感興趣的讀者可以參閱JUnit的相關文檔。在Ant中使用JUnit的方法非常簡單,首先需要把junit.jar拷入ANT_HOME\lib下,確認在這個目錄下有optional.jar,因為JUnit是Ant的擴展任務,需要引用這個擴展包。然后就是在Build文件中加入JUnit的任務,代碼如下:

    <target name="run" depends="client">
    <junit printsummary="yes" fork="yes" haltonfailure="yes">
    <classpath>
    <pathelement location="client.jar" />
    </classpath>
    <formatter type="plain" />
    <test name="com.sharetop.antdemo.HelloWorldTest" />
    </junit>
    </target>


    高級話題

    為Ant開發擴展任務

    為Ant實現擴展任務其實是非常容易的,只需按照以下幾個步驟即可:

    1. 創建一個Java類繼承org.apache.tools.ant.Task類;

    2. 對每個屬性實現set方法。Ant會根據需要自動完成類型轉換;

    3. 如果擴展的任務需要嵌套其它的Task,那么這個Java類必需實現接口org.apache.tools.ant.TaskContainer;

    4. 如果擴展的任務要支持Text,需要增加一個方法void addText(String);

    5. 對每個嵌套的元素,實現create、add 或 addConfigured 方法;

    6. 實現public void execute方法;

    7. 在build.xml文件中使用 <taskdef> 來引用自定義的Task。

    下面以一個簡單的例子來說明如何為Ant增加一個hello任務,它可以連續打印多條信息,打印的次數由屬性count指定,而打印的內容則由它內嵌的一個helloinfo任務的message屬性指定,看上去這非常類似JSP中自定義標簽的一些概念,實現代碼如下:

    //HelloInfoTask.java
    package com.sharetop.antdemo;
    import org.apache.tools.ant.*;
    public class HelloInfoTask {
    private String msg;
    public void execute() throws BuildException {
    System.out.println(msg);
    }
    public void setMessage(String msg) {
    this.msg = msg;
    }
    }


    下面是外部Task類的代碼:

    //HelloTask.java
    package com.sharetop.antdemo;
    import org.apache.tools.ant.*;
    public class HelloTask extends Task implements org.apache.tools.ant.TaskContainer
    {
    private Task info;
    private int count;
    public void execute() throws BuildException {
    for(int i=0;i<count;i++)
    info.execute();
    }
    public void setCount(int c){
    this.count=c;
    }
    public void addTask(Task t){
    this.info=t;
    }
    }


    實現了這兩個Task,在build.xml文件中定義它的task name,就可以在Target中執行它了。如果你不想使用 <taskdef> 標簽來定義Task,也可以通過修改default.properties文件來實現引入新Task,這個文件位于org.apache.tools.ant.taskdefs 包里。下例是一個使用 標簽來引入新Task的Build文件部分:

    <target name="hello" depends="client">
    <taskdef name="hello"
    classname="com.sharetop.antdemo.HelloTask" classpath="client.jar"/>
    <taskdef name="helloinfo"
    classname="com.sharetop.antdemo.HelloInfoTask" classpath="client.jar"/>
    <hello count="3" >
    <helloinfo message="hello world" />
    </hello>
    </target>

    每個Task是一段可被執行的代碼,比如,前例中的javac、jar就是兩個最常用的Task。Ant定義了大量的核心Task,我們要考慮的第二個問題正是如何去掌握這大量的Task。其實唯一的方法就是邊學習邊實踐,這方面最好的參考就是官方的Ant使用手冊。

    外部文件的使用

    使用外部的Property文件可以保存一些預設置的公共屬性變量。這些屬性可以在多個不同的Build文件中使用。

    可以將一個外部的XML文件導入Build文件中,這樣多個項目的開發者可以通過引用來共享一些代碼,同樣,這也有助于Build文件的重用,示例代碼如下所示:

    <!DOCTYPE project [
    <!ENTITY share-variable SYSTEM "file:../share-variable.xml">
    <!ENTITY build-share SYSTEM "file:../build-share.xml">
    ]>
    <project name="main" default="complie" basedir=".">
    &share-variable;
    &build-share;
    ... ...


    在J2EE項目中的應用

    只要掌握了Ant的使用方法,在J2EE項目中的應用與在其它項目中的應用并沒有太大的不同,但是仍有幾點是需要注意的。

    一是要清楚War和Jar文件的目錄結構,主要是War的配置文件web.xml文件的位置和EJB的配置文件(ejb-jar.xml和weblogic-ejb-jar.xml等)的位置,在調用Jar任務打包文件時一定要記得把它們也包含進來。一般在編譯之前就要注意把這些需打包的文件拷入相應目錄下。二是在J2EE項目中可能會涉及到一些特殊的任務,比如在Weblogic中會調用ejbc預編譯EJB的代碼存根,或者需要在Ant中同時發布Jar到相應的服務器中等。可以用兩種途徑實現這些任務,一是擴展Ant任務實現這些任務,二是直接用Java任務來執行這些命令。下面是打包、發布一個EJB的build.xml配置文件片斷,代碼如下:

    <target name="deploy_HelloEJB" depends="compile">
    <delete dir="${temp}/ejb_make"/> <!-- 首先刪除臨時目錄 -->
    <delete file="${temp}/helloEJB.jar"/>
    <!-- 刪除WebLogic域中老版本的EJB -->
    <delete file="${weblogic.deploy.dest}/helloEJB.jar"/>
    <!-- 創建META-INF目錄,放置ejb-jar.xml和weblogic-ejb-jar.xml -->
    <mkdir dir="${temp}/ejb_make/META-INF"/>
    <!-- 拷貝ejb-jar.xml和weblogic-ejb-jar.xml 到臨時目錄-->
    <copy todir="${temp}/ejb_make/META-INF">
    <fileset dir="etc/baseinfo">
    <include name="*.xml"/>
    </fileset>
    </copy>
    <!-- 拷貝所有的helloEJB類到臨時目錄 -->
    <copy todir="${temp}/ejb_make/">
    <fileset dir="${dest.classes}/"> <!-- dest.classes是輸出的類文件目錄 -->
    <include name="${dest.classes}/helloEJB/**"/>
    </fileset>
    </copy>
    <!-- 將所有這些文件打包成helloEJB.jar -->
    <jar jarfile="${temp}/helloEJB.jar" basedir="${temp}/ejb_make"/>
    <!-- 進行weblogic.ejbc編譯 -->
    <java classpath="${wl_cp}" classname="weblogic.ejbc" fork="yes" >
    <classpath>
    <fileset dir="lib">
    <include name="*.jar" />
    </fileset>
    </classpath>
    <arg value="${temp}/helloEJB.jar" />
    <arg value="${temp}/helloEJB_deploy.jar" />
    </java>
    <!-- 拷貝/發布到WebLogic的{DOMAIN}\applications目錄 -->
    <copy file="${temp}/helloEJB_deploy.jar" todir="${weblogic.deploy.dest}"/>
    </target>


    用Ant配合JUnit實現單元測試

    Ant 提供了JUnit任務,可以執行單元測試代碼。如何使用JUnit,以及如何編寫測試用例(TestCase),感興趣的讀者可以參閱JUnit的相關文檔。在Ant中使用JUnit的方法非常簡單,首先需要把junit.jar拷入ANT_HOME\lib下,確認在這個目錄下有optional.jar,因為JUnit是Ant的擴展任務,需要引用這個擴展包。然后就是在Build文件中加入JUnit的任務,代碼如下:

    <target name="run" depends="client">
    <junit printsummary="yes" fork="yes" haltonfailure="yes">
    <classpath>
    <pathelement location="client.jar" />
    </classpath>
    <formatter type="plain" />
    <test name="com.sharetop.antdemo.HelloWorldTest" />
    </junit>
    </target>

    posted @ 2006-04-27 11:23 狼愛上貍 閱讀(538) | 評論 (0)編輯 收藏

    ANT 下載,ant的配法

    下載http://www.apache.org/dist/ant/binaries下的apache-ant-1.6.1-bin.zip ? ?
    接壓安裝。 ?
    ?
    ant的配法: ?
    1。解壓ant的包到本地目錄。 ?
    2。在環境變量中設置ANT_HOME,值為你的安裝目錄。 ?
    3。在環境變量中設置JAVA_HOME,值為你的jdk安裝目錄。 ?
    4。把ANT_HOME/bin加到你系統的path目錄中去。 ?
    ?
    在cmd模式下輸入 ?ant ?-version回車,看到輸出說明配置成功。??

    posted @ 2006-04-27 11:11 狼愛上貍 閱讀(3593) | 評論 (3)編輯 收藏

    apache的日常維護

    一:Apache的主要缺陷
    1:HTTP拒絕服務
    2:緩沖區溢出
    3:被攻擊者獲得root權限
    4:配置文件的保護
    5:服務器訪問控制
    6:密碼保護
    7:Apache日志文件
    8:安全相關的指令
    9:SSI(Server-Side Includes)的安全
    10:其它安全工具
    11:總結

    綜述


    本文將討論UNIX平臺下,Apache WEB服務器安裝和配置的安全問題。我們假定閱讀本文的系統管理員已經針對自己站點的情況選擇了相關的模塊,并且能夠進行配置、創建和排除故障。本文的主要目的是幫助你簡歷一個安全的Apache歪脖(web icon_razz.gif)服務器。

    在眾多的Web服務器產品中,Apache是應用最為廣泛的一個產品,同時也是一個設計上非常安全的程序。但是,同其它應用程序一樣,Apache也存在安全缺陷。本文主要針對三個安全缺陷進行討論,包括:使用HTTP協議進行的拒絕服務攻擊(denial of service)、3緩沖區溢出攻擊以及被攻擊者獲得root權限。注意:合理的配置能夠保護Apache免遭多種攻擊,但是在網絡層上的拒絕服務攻擊則不是調整Apache的配置所能夠防止的。本文所涉及的是使用HTTP(應用層)協議進行的拒絕服務攻擊。

    一:Apache的主要缺陷

    1:HTTP拒絕服務

    攻擊者通過某些手段使服務器拒絕對HTTP應答。這會使Apache對系統資源(CPU時間和內存)需求的劇增,最終造成系統變慢甚至完全癱瘓。

    2:緩沖區溢出

    攻擊者利用程序編寫的一些缺陷,使程序偏離正常的流程。程序使用靜態分配的內存保存請求數據,攻擊者就可以發送一個超長請求使緩沖區溢出。比如一些Perl編寫的處理用戶請求的網關腳本。一旦緩沖區溢出,攻擊者可以執行其惡意指令或者使系統宕機。

    3:被攻擊者獲得root權限

    Apache一般以root權限運行(父進程),攻擊者通過它獲得root權限,進而控制整個系統。
    獲得最新的Apache
    使用最安全版本對于加強Apache Web服務器的安全是至關重要的。
    你可以從Apache的官方網站http://www.apache.org獲得Apache的最新版本。

    4:配置文件的保護

    Apache Web服務器有三個主要的配置文件,它們一般位于/usr/local/apache/conf目錄。這三個文件是:httpd.con、srm.conf和access.conf。這些文件是整個Apache的控制中心,因此需要對三個配置文件有所了解。httpd.conf文件是主配置文件;srm.conf允許你填加資源文件;access.conf設置文件的訪問權限。這些文件的配置可以參考http://httpd.apache.org/docs/mod/core.html

    5:服務器訪問控制

    access.conf文件包含一些指令控制允許什么用戶訪問Apache目錄。應該把deny from all作為初始化指令,然后使用allow from指令打開訪問權限。你可以允許來自某個域、IP地址或者IP段的訪問。例如:

    order deny,allow
    deny from all
    allow from sans.org


    6:密碼保護

    使用.htaccess文件,可以把某個目錄的訪問權限賦予某個用戶。系統管理員需要在httpd.conf或者srm.conf文件中使用AccessFileName指令打開目錄的訪問控制。以下是一個.htaccess示例文件:

    AuthName PrivateFiles
    AuthType Basic
    AuthUserFile /path/to/httpd/users
    require foo <---一個有效的用戶名

    然后,使用如下命令填加一個用戶:

    # htpasswd -c /path/to/httpd/users foo


    7:Apache日志文件

    系統管理員可以使用日志格式指令來控制日志文件的信息。使用LogFormat "%a %l"指令,可以把發出HTTP請求瀏覽器的IP地址和主機名記錄到日志文件。出于安全的考慮,你至少應該那些驗證失敗的WEB用戶,在http.conf文件中加入LogFormat "%401u"指令可以實現這個目的。這個指令還有其它的許多參數,用戶可以參考Apache的文檔。另外,Apache的錯誤日志文件對于系統管理員來說也是非常重要的,錯誤日志文件中包括服務器的啟動、停止以及CGI執行失敗等信息。

    8:安全相關的指令

    在Apache配置文件中,有一些安全相關的指令可以使用。這些指令的詳細用法可以參考http://httpd.apache.org/docs/mod/directives.html。

    使用以下指令可以幫助你減小拒絕服務的威脅:

    LimitRequestbody: 數字參數,控制HTTP請求的大小。
    LimitRequestFields: 數字參數,控制請求頭的數目。
    KeepAlive: 設置連接的生存期。
    KeepAliveTimeout: 限制等待請求的時間。

    使用以下指令可以幫助你叫囂緩沖區溢出的危險:

    LimitRequestFieldSize: 限制每個請求頭的大小。
    LimitRequestLine: 限制每個請求行的大小。

    CGI(ommon Gateway Interface,通用網關接口)的安全威脅


    CGI的安全性非常重要,攻擊者可以利用CGI的缺陷獲得系統信息、執行系統命令、占用系統資源。如果一個CGI程序使用靜態分配的內存,就可能為緩沖區溢出攻擊提供機會。為了減少這種風險,程序員應該在CGI代碼中使用動態分配內存。除了CGI編寫人員應該注意外,系統管理員可以采取對CGI進行封裝(例如:suEXEC或者CGI Wrap)的辦法加強CGI的安全性。通過這種方式可以使CGI程序以某個獨立的用戶權限運行,即使發生緩沖區溢出,也只影響那個用戶的目錄/文件。

    perl是一種功能非常強大的腳本語言。主要用于文本的處理,程序員還可以通過perl腳本使用系統調用。如果程序編寫的不好,就會為攻擊者闖入服務器大開方便之門。因此,使用perl腳本一定要小心,以免出現此類漏洞。在perl腳本中,處理請求數據之前,最好能夠調用專門的檢查例程對輸入的合法性進行檢查。除此之外,還要確保Apache不是以root的權限運行的,Perl腳本被限制在某個特定的目錄下運行。

    9:SSI(Server-Side Includes)的安全

    使用SSI,程序員可以建立一些常用的例程,在需要時把這些例程包含進他們的代碼中。SSI還允許有條件地執行外部程序,攻擊者可能利用這個條件讓服務器執行他們的惡意程序。在access.conf文件中使用IncludesNoEXEC指令,可以關閉執行SSI文件的功能。不過這條指令會造成服務器不執行CGI腳本或者程序。

    10:其它安全工具

    使用TCP Wrappers和Tripwire可以為你的系統提供額外的保護。你可以使用TCP Wrappers來控制Telnet或者FTP的訪問權限。Tripwire是一個數據完整性檢測工具,可以幫助系統管理員監視系統是否被改動過,你可以在Tripwire的配置文件中編制特定的策略,監視Web服務器的配置文件、數據和CGI文件是否被修改。

    11:總結


    Apache是一個優秀的歪脖服務器,雖然Apache的開發者非常注重其安全性,但是由于Apache非常龐大,難免會存在安全隱患。Apache的安裝維護中需要注意以下問題:

    1: 檢查文件和目錄的權限是否恰當。
    2: httpd.conf、srm.conf和access.conf的設置是否適當
    3: 使服務器日志文件能夠記錄盡可能詳細的信息。
    4: 對某些需要特別保護的目錄使用密碼保護(.htaccess)。
    5: 對CGI腳本或者程序進行封裝。
    6: 如果CGI使用Perl編寫,要詳細檢查其安全性
    7: 檢查SSI指令
    8: 使用TCP Wrappers和Tripwire。(linux知識寶庫)

    posted @ 2006-04-21 16:45 狼愛上貍 閱讀(216) | 評論 (0)編輯 收藏

    正確配置和維護Apache WEB Server 安全性

    ?? 前言:在目前的Internet時代,主頁已成為樹立公司形象和展示自我天地的一個重要手段,配置一臺強大且安全的Web Server就顯得尤其重要。在眾多的Web Server產品中,Apache是應用最為廣泛的一個產品,同時也是一個設計上非常安全的程序。但是,同其它應用程序一樣,Apache也存在安全缺陷。本文將詳細介紹如何正確配置和維護Apache WEB Server的安全性問題等。
    ?? ?一,Apache服務器的介紹

    ??? Apache服務器它是Internet網上應用最為廣泛的Web服務器軟件之一。Apache服務器源自美國國家超級技術計算應用中心(NCSA)的Web服務器項目中。目前已在互聯網中占據了領導地位。Apache服務器得經過精心配置之后,才能使它適應高負荷,大吞吐量的互聯網工作。快速、可靠、通過簡單的API擴展,Perl/Python解釋器可被編譯到服務器中,且完全免費,完全源代碼開放。如果你需要創建一個每天有數百萬人訪問的Web服務器,Apache可能是最佳選擇。

    ??? 二,Apache服務器的主要安全缺陷

    ??? 正如我們前言所說盡管Apache服務器應用最為廣泛,設計上非常安全的程序。但是同其它應用程序一樣,Apache也存在安全缺陷。畢竟它是完全源代碼,Apache服務器的安全缺陷主要是使用HTTP協議進行的拒絕服務攻擊(denial of service)、緩沖區溢出攻擊以及被攻擊者獲得root權限三缺陷和最新的惡意的攻擊者進行“拒絕服務”(DoS)攻擊。合理的網絡配置能夠保護Apache服務器免遭多種攻擊。我們來介紹一下主要的安全缺陷:

    ?? ?(1)使用HTTP協議進行的拒絕服務攻擊(denial of service)的安全缺陷

    ??? 這種方法攻擊者會通過某些手段使服務器拒絕對HTTP應答。這樣會使Apache對系統資源(CPU時間和內存)需求的劇增,最終造成Apache系統變慢甚至完全癱瘓。

    ???
    (2)緩沖區溢出的安全缺陷

    ??? 該方法攻擊者利用程序編寫的一些缺陷,使程序偏離正常的流程。程序使用靜態分配的內存保存請求數據,攻擊者就可以發送一個超長請求使緩沖區溢出。比如一些Perl編寫的處理用戶請求的網關腳本。一旦緩沖區溢出,攻擊者可以執行其惡意指令或者使系統宕機。

    ?
    ? (3)被攻擊者獲得root權限的安全缺陷

    ??? 該安全缺陷主要是因為Apache服務器一般以root權限運行(父進程),攻擊者會通過它獲得root權限,進而控制整個Apache系統。

    ??? (4)惡意的攻擊者進行“拒絕服務”(DoS)攻擊的安全缺陷
    ??? 這個最新在6月17日發現的漏洞,它主要是存在于Apache的chunk encoding中,這是一個HTTP協議定義的用于接受web用戶所提交數據的功能。 利用黑客程序可以對于運行在FreeBSD 4.5, OpenBSD 3.0 / 3.1, NetBSD 1.5.2平臺上的Apache服務器均可進行有效的攻擊.

    ??? 所有說使用最高和最新安全版本對于加強Apache Web服務器的安全是至關重要的。請廣大Apache服務器管理員去
    http://www.apache.org/dist/httpd/下載補丁程序以確保其WEB服務器安全

    ?
    ? 三, 正確維護和配置Apache服務器

    ??? 雖然Apache服務器的開發者非常注重安全性,由于Apache服務器其龐大的項目,難免會存在安全隱患。正確維護和配置Apache WEB服務器就很重要了。我們應注意的一些問題:

    ??? (1)Apache服務器配置文件
    ??? Apache Web服務器主要有三個配置文件,位于/usr/local/apache/conf目錄下。這三個文件是:
    ??? httpd.con----->主配置文件
    ??? srm.conf------>填加資源文件
    ??? access.conf--->設置文件的訪問權限
    注:具體配置可以參考:
    http://httpd.apache.org/docs/mod/core.html

    ??? (2)Apache服務器的日志文件
    ??? 我們可以使用日志格式指令來控制日志文件的信息。使用Logformat "%a %l"指令,可以把發出HTTP請求瀏覽器的IP地址和主機名記錄到日志文件。出于安全的考慮,在日志中我們應知道至少應該那些驗證失敗的WEB用戶,在http.conf文件中加入Logformat "%401u"指令可以實現這個目的。這個指令還有其它的許多參數,用戶可以參考Apache的文檔。另外,Apache的錯誤日志文件對于系統管理員來說也是非常重要的,錯誤日志文件中包括服務器的啟動、停止以及CGI執行失敗等信息。更多請參看Apache日志系列1-5。

    ??? (3)Apache服務器的目錄安全認證
    ??? 在Apache Server中是允許使用 .htaccess做目錄安全保護的,欲讀取這保護的目錄需要先鍵入正確用戶帳號與密碼。這樣可做為專門管理網頁存放的目錄或做為會員區等。
    在保護的目錄放置一個檔案,檔名為.htaccss
    AuthName "會員專區"
    AuthType "Basic"
    AuthUserFile "/var/tmp/xxx.pw" ----->把password放在網站外
    require valid-user

    到apache/bin目錄,建password檔

    % ./htpasswd -c /var/tmp/xxx.pw username1 ----->第一次建檔要用參數"-c"

    % ./htpasswd /var/tmp/xxx.pw username2
    這樣就可以保護目錄內的內容,進入要用合法的用戶.
    注:采用了Apache內附的模組。也可以采用在httpd.conf中加入: 
    options indexes followsymlinks 
    allowoverride authconfig 
    order allow,deny 
    allow from all 

    ?? (4)Apache服務器訪問控制
    ??? 我們就要看三個配置文件中的第三個文件了,即access.conf文件,它包含一些指令控制允許什么用戶訪問Apache目錄。應該把deny from all設為初始化指令,再使用allow from指令打開訪問權限。


    order deny,allow
    deny from all
    allow from safechina.net


    設置允許來自某個域、IP地址或者IP段的訪問。

    ??? (5)Apache服務器的密碼保護問題
    ???? 我們再使用.htaccess文件把某個目錄的訪問權限賦予某個用戶。系統管理員需要在httpd.conf或者srm.conf文件中使用AccessFileName指令打開目錄的訪問控制。如:
    AuthName PrivateFiles
    AuthType Basic
    AuthUserFile /path/to/httpd/users
    require Phoenix

    # htpasswd -c /path/to/httpd/users Phoenix

    ??
    ?四,設置Apache服務器的WEB和文件服務器

    ??? 我們在Apache服務器上存放WEB服務器的文件,供用戶訪問,并設置/home/ftp/pub目錄為文件存放區域,用 http://download.your.com/pub/來訪問。在防火墻上設置apache反向代理技術,由防火墻代理訪問 。 
     
    ? ? (1)Apache服務器的設置 
      apache服務器采用默認配置。主目錄為/home/httpd/html,主機域名為Phoenix.your.com,且別名到www.your.com中, 并且設置srm.conf加一行別名定義如下: 
    Alias /pub /home/ftp/pub/ 

    更改默認應用程序類型定義如下: 
    DefaultType application/octet-stream 

    最后在/etc/httpd/conf/access.conf中增加一項定義 

    Options Indexes 
    AllowOverride AuthConfig 
    order allow,deny 
    allow from all 

    注:Options Indexes允許在找不到index.html文件的情況下允許列出目錄/文件列表。AllowOverride AuthConfig允許做基本的用戶名和口令驗證。這樣的話,需要在/home/ftp/pub目錄下放入.htaccess,內容如下: 

    [root@shopu pub]# more .htaccess 
    AuthName Branch Office Public Software Download Area 
    AuthType Basic 
    AuthUserFile /etc/.usrpasswd 
    require valid-user 

    用# htpasswd -c /etc/.usrpasswd user1  分別創建不同的允許訪問/pub下文件服務的外部用戶名和口令。 

    (2)在防火墻上配置反向代理技術. 
      在/etc/httpd/conf/httpd.conf  中加入 NameVirtualHost xxx.xxx.xxx.xxx 
    # xxx.xxx.xxx.xxx ----->是防火墻外部在互聯網上永久IP地址 
    servername www.your.com 
    errorlog /var/log/httpd/error_log 
    transferlog /var/log/httpd/access_log 
    rewriteengine on 
    proxyrequests off 
    usecanonicalname off 
    rewriterule ^/(.*)$ http://xxx.xxx.xx.x/$1 Apache服務器的IP地址。


    servername http://download.your.com/pub/
    errorlog /var/log/httpd/download/error_log 
    transferlog /var/log/httpd/download/access_log 
    rewriteengine on 
    proxyrequests off 
    usecanonicalname off 
    rewriterule ^/(.*)$ http://xxx.xxx.xx.x/$1 同上Apache服務器的IP地址。

    設置防火墻上的DNS,讓download.your.com和www.your.com都指向防火墻的外部網地址xxx.xxx.xxx.xxx。用http://www.your.com訪問主頁,用http://download.your.com/pub/訪問公共文件的下載區。

    注:還需要在apache服務器主機上建立目錄/var/log/httpd/download/,否則會出錯。另外,也可以設置防火墻主機上的/home/httpd/html/index.html的屬性為750來阻止訪問,這是防外部用戶能訪問到防火墻上的Apache服務器的http://www.your.com中。 

    總結:Apache Server是一個非常優秀,非常棒的服務器,只要你正確配置和維護好Apache服務器,你就會感受到Apache Server 所帶來的好處,同樣希望你能夠通過閱讀本文達到理論和實踐雙豐收的目的。謝謝。(linux知識寶庫)

    posted @ 2006-04-21 16:44 狼愛上貍 閱讀(192) | 評論 (0)編輯 收藏

    讓APACHE防止多線程下載

    下面是sane@nsfocus.com寫的一些關于mod_limitipconn.c的文檔,可以參考一下:

    [作者: sane@nsfocus.com ]

    mod_limitipconn.c是一個非官方的apache模塊,可以用來作為WEB文件的下載限制
    ,但是它是使用ExtendedStatus On形式,工作在應用層。當同一個IP的連接到達
    限制的時候,apache對get請求發送:

    HTTP/1.1 503 Service Temporarily Unavailable

    從而使用戶不能下載,但并不能阻止這種攻擊,仍舊允許連接的。不過這個東東對
    網管來說還是很有用的,特別是下載站的網管。簡單介紹一下安裝(動態模塊方式
    安裝,假設你的apache已經裝在/usr/local/apache目錄下):

    下載:http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz

    # tar xzf mod_limitipconn-0.04.tar.gz
    # cd mod_limitipconn-0.04
    # vi Makefile

    把第一行的:

    APXS = apxs

    改為

    APXS = /usr/local/apache/bin/apxs

    然后:

    # make
    # make install

    修改apache配置文件:

    # vi /usr/local/apache/conf/httpd.conf

    ExtendedStatus On ###make install時這句前面的#沒有去掉,一定要去掉

    ###make install已經加了下面兩句,確認存在就行了
    LoadModule limitipconn_module libexec/mod_limitipconn.so
    AddModule mod_limitipconn.c

    ###下面就是對web目錄下的文件下載限制


    MaxConnPerIP 3 ###限制web根目錄同一個IP只能同時開3進程下載

    # 還有其它選項,如:
    # NoIPLimit image/*
    # OnlyIPLimit audio/mpeg video
    # 可以設置多個Location



    重啟apache,用多線程的下載工具下載時,大于3個線程,其余的將得到信息:

    HTTP/1.1 503 Service Temporarily Unavailable

    或者根據User_Agent判斷,把已知的多線程工具都給deny 掉
    in httpd.conf
    .....
    BrowserMatch "NetAnt" badguy
    BrowserMatch "GetRight" badguy
    BrowserMatch "JetCar" badguy
    BrowserMatch "Mass Downloader" badguy
    BrowserMatch "ReGet" badguy
    BrowserMatch "DLExpert" badguy
    BrowserMatch "FlashGet" badguy
    BrowserMatch "Offline Explorer" badguy
    BrowserMatch "Teleport" badguy
    ...........

    order deny,allow
    deny from env=badguy
    allow from all


    注意httpd里面應該有 mod_setenvif模塊。

    posted @ 2006-04-21 16:43 狼愛上貍 閱讀(211) | 評論 (0)編輯 收藏

    win2000下apache2.0.55+weblogic8.15的配置方法

    1.把C:\bea\weblogic81\server\bin\mod_wl_20.so拷貝到C:\Program Files\Apache Group\Apache2\modules下;
    2.修改C:\Program Files\Apache Group\Apache2\conf\httpd.conf文件
    ?? 增加
    LoadModule weblogic_module modules/mod_wl_20.so

    # WEBLOGIC MODULE
    <IfModule mod_weblogic.c>
    WebLogicHost 127.0.0.1
    WebLogicPort 7001
    MatchExpression *.jsp
    </IfModule>


    DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs"
    改為
    DocumentRoot "C:\bea\user_projects\applications\mydomain\DefaultWebApp"


    <Directory "C:/Program Files/Apache Group/Apache2/htdocs">
    改為
    <Directory "C:\bea\user_projects\applications\mydomain\DefaultWebApp">

    3 在C:\Program Files\Apache Group\Apache2\bin下輸入
    ?? apache -t
    ?? 測試
    ?? 如果ok,則成功
    4.重啟apache服務

    posted @ 2006-04-21 16:40 狼愛上貍 閱讀(314) | 評論 (0)編輯 收藏

    配置策略,禁止139/445端口連接

    也許大家都知道網上有些掃描器如letmein.exe,whoisadmin.exe等,是通過TCP的139和445端口來獲取一些計算機相關信息,如計算機的名稱,管理員帳號。這樣便可以通過相應的攻擊工具進行入侵了。當知道了管理員的帳號后,可以猜測或暴力破解其密碼來獲得計算機的控制權。怎么辦呢?利用win2000自身的策略設置,就能解決。我們采取對本地安全設置里的"IP安全設置,在本地機器" 來進行設置,禁止TCP的139/445連接。

    在進行策略設置前,首先來了解一下相應的原理吧!

    一、基本原理
    SMB(Server Message Block) Windows協議族,用于文件和打印共享服務。NBT(NetBIOS over TCP/IP) 使用137(UDP), 138(UDP) and 139 (TCP)來實現基于TCP/IP的NETBIOS網際互聯。

    在Windows NT中SMB基于NBT實現。 而在Windows2000中,SMB除了基于NBT的實現,還有直接通過445端口實現。 當Win2000(允許NBT)作為client來連接SMB服務器時,它會同時嘗試連接139和445端口,如果445端口有響應,那么就發送RST包給139端口斷開連接,以455端口通訊來繼續.當445端口無響應時,才使用139端口。當Win2000(禁止NBT)作為client來連接SMB服務器時,那么它只會嘗試連接445端口,如果無響應,那么連接失敗。(注意可能對方是NT4.0服務器。) 如果win2000服務器允許NBT, 那么UDP端口137, 138, TCP 端口 139, 445將開放。 如果 NBT 被禁止, 那么只有445端口開放。

    二、實戰操作
    簡單的原理就這些了,那如何實現呢?方法如下

    1. 通過對開始->設置->控制面版->管理工具 -> 本地安全策略 ->(鼠標右擊)IP安全策略,在本地機器。點擊"管理IP篩選器表和篩選器操作",如圖1所示。

    2.在"管理IP篩選器列表"選項卡上點擊"添加"。

    3.彈出"IP篩選器列表"窗口。

    4.分別添入名稱和描述,如禁用139連接。并點擊"添加",接著會出現一個IP"篩選器向導",單擊下一步。

    5.到"指定IP源地址"窗口,在"源地址"中選擇"任何IP地址",點擊下一步。

    6.在"IP通信目標"的"目標地址"選擇"我的IP地址",點擊下一步。

    7.在"IP協議類型"的"選擇協議類型"選擇"TCP",點擊下一步。

    8.在"篩選器向導"的"設置IP協議端口"里第一欄為"從任意端口",第二欄為"到此端口"并添上"139",點擊下一步。

    9.接著點擊"完成" ->然后再單擊"關閉" 回到"管理IP篩選器表和篩選器操作"窗口。

    10.選擇"管理篩選器操作"選項卡點擊"添加"。

    11.同樣會出現一個"篩先器操作向導"的窗口,點擊"下一步",在"名稱"里添上"禁用139連接"。

    12.按"下一步",并選擇"阻止",再按"下一步"。

    點擊"完成"和"關閉"。

    到這里"禁止139連接"的策略算是制定好了。不用多說了,禁用445端口的"篩選器列表"和"篩選器操作"的添加是和"禁止139連接"的方法一樣的! 有一點,是需要注意的在添加139和445的篩選器操作時,不能為了省事用同一個"阻止"篩選器操作,這樣制定出的規則將無法使用。
    13.當禁止139/445的操作都完成后,回到"IP安全策略,在本地機器" ,通過右擊創建"IP安全策略"

    14.會出現一個"IP安全策略向導"的窗口,直接點擊"下一步",在"名稱"添入"禁用139/445連接",一直點擊"下一步"到"完成"。

    15.在"禁用139/445連接 屬性"里點擊"添加"。

    16.會出現一個"安全規則向導"窗口,一直點擊"下一步"到"IP篩選器列表"選擇"禁用139連接",點擊"下一步"。

    17.在"篩選器操作"選擇"禁用139連接",點擊"下一步",接著點去"完成"和"確定"。

    18. 此時,可以通過"添加"將禁用445端口的篩選器列表和操作也加進去。

    19.接著是一直點擊"下一步",到"IP篩選器列表",選擇"禁用445連接",點擊"下一步"。

    20.此時,已經完成了所有的配置。點擊"關閉"。回到"屬性"窗口,設置好的窗口呈現如下 。

    21.最后,將我們剛才配置好的"禁用139/445連接"的安全策略指派即可。大功告成啦!

    當然,如果你已有了自己的策略或使用系統自代的策略也是可以通過添加規則的方法來實現禁用139/445的目的,但創建"IP篩選器列表"和"管理篩選器操作"是一定要作的。同理你也可以通過IP安全設置里,對ICMP進行策略的制定,限制ping工具的使用。現用在用letmein之類的掃描器再試試吧!

    附:這是未作禁用139/445策略時,用letmein.exe和whoisadmin.exe的探測結果,如下圖:

    作過禁用139/445策略后的探測結果就變成了這樣,如下圖:

    注:以上的測試是在域控制器上作的,如果不是的話,在2000server上操作的過程中會有如下的提示:

    不需要去管它,點擊"是"就可以了!

    posted @ 2006-04-17 11:24 狼愛上貍 閱讀(281) | 評論 (0)編輯 收藏

    Weblogic8.1里面使用JDataStore的方法

    Weblogic8.1里面使用JDataStore的方法
    JDataStore是JBuilder自帶的數據庫,最近摸索了幾天終于在Weblogic8.1下面成功
    部署了一個操作數據庫的Web application,為了給所有像我一樣的初學者指指路,下
    面簡單說說具體的操作。

    1.Weblogic里面沒有JDataStore的數據驅動,所以要先到JBuilder的安裝文件夾下面,
    把lib文件夾下面的jdsremote.jar文件復制到Weblogic安裝文件夾(比如D:\BEA)下面的
    D:\BEA\weblogic81\server\lib里面,然后到D:\BEA\user_projects\mydomain下面
    修改startWeblogic.cmd文件,在set CLASSPATH=后面加上
    %WL_HOME%\server\lib\jdsremote.jar;
    這里%WL_HOME%代表某個文件夾,比如:WL_HOME=D:\BEA\weblogic81

    2.JDataStore的數據驅動名為:com.borland.datastore.jdbc.DataStoreDriver
    數據庫URL應該寫成如下格式:
    jdbc:borland:dsremote://localhost/E:\My Program\User_Table.jds
    下面是我寫的一段程序,權當參考吧。

    public boolean find(String username,String password) throws Exception
    {
    Class.forName("com.borland.datastore.jdbc.DataStoreDriver").newInstance();
    String url="jdbc:borland:dsremote://localhost/E:\\My Program\\User_Table.jds";
    Connection con=DriverManager.getConnection(url,"DataStoreExplorer","user");
    Statement sta=con.createStatement();
    String sqlstr="select * from my_user where username='" + username + "' and password='" + password + "'";
    ResultSet ret=sta.executeQuery(sqlstr);
    if (ret.next()) return true;
    else return false;
    }
    最后,記得先運行JDataStore Server,否則會出現被refuse的錯誤:)

    posted @ 2006-04-16 08:09 狼愛上貍 閱讀(248) | 評論 (0)編輯 收藏

    npkcrypt 服務啟動失敗

    npkcrypt 服務啟動失敗

    事件類型:?錯誤
    事件來源:?Service Control Manager
    事件種類:?無
    事件 ID:?7000
    日期:??2006-1-6
    事件:??9:00:30
    用戶:??N/A
    計算機:?AFLY
    描述:
    由于下列錯誤,npkcrypt 服務啟動失敗:
    系統找不到指定的文件。
    有關更多信息,請參閱在 http://go.microsoft.com/fwlink/events.asp 的幫助和支持中心。

    QQ2005 Beta3 整合了一個叫做 npkcrypt 的鍵盤加密程序,美其明曰保護用戶密碼輸入安全,其實是不經用戶同意擅自在用戶系統中安裝莫名其妙驅動程序。安裝此版本后,密碼不能通過粘貼的方法輸入,密碼為中文的QQ用戶沒法登錄。

    如果手動刪除QQ或轉移QQ目錄或正常路徑卸載該版本后 npkcrypt 也可能沒有正常卸載,就會出現以上的“npkcrypt 服務啟動失敗: 系統找不到指定的文件”錯誤。

    解決方法:

    1、在“我的電腦”上點右鍵,選“管理”->“設備管理器”。
    2、選擇“查看”/“顯示隱藏的設備”,在“非即插即用驅動程序”中選擇“npkcrypt”,卸載之。
    3、運行“regedit”,可能存在鍵項:“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\npkcrypt”或“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\npkcrypt”等,刪除之。
    4、如果QQ目錄存在:npkcrypt.sys、npkcrypt.vxd、npkcusb.sys 三個文件,刪除之。
    5、下次啟動后即可生效。

    posted @ 2006-04-05 15:41 狼愛上貍 閱讀(350) | 評論 (0)編輯 收藏

    僅列出標題
    共38頁: First 上一頁 30 31 32 33 34 35 36 37 38 
    主站蜘蛛池模板: 精品一区二区三区高清免费观看 | 免费在线观看一区| 7723日本高清完整版免费| 亚洲色偷偷av男人的天堂| 日本免费人成视频在线观看| 亚洲高清在线播放| 99爱在线观看免费完整版| 久久久无码精品亚洲日韩蜜臀浪潮| 国产精品免费一区二区三区四区| 久久精品夜色国产亚洲av| 18禁无遮挡无码国产免费网站| 亚洲美女一区二区三区| 无遮免费网站在线入口| 亚洲一区电影在线观看| 成人免费在线观看网站| 亚洲av永久无码| 亚洲毛片网址在线观看中文字幕 | 美女被免费视频网站a国产| 激情无码亚洲一区二区三区| 亚洲&#228;v永久无码精品天堂久久| 欧亚一级毛片免费看| 亚洲国产精彩中文乱码AV| 日韩免费精品视频| 羞羞漫画小舞被黄漫免费| 亚洲国产精品无码久久久秋霞2| 18禁无遮挡无码国产免费网站| 亚洲AV无码AV日韩AV网站| 亚洲中文字幕无码永久在线| 日韩免费无码一区二区三区 | 亚洲videosbestsex日本| 国产免费人成视频在线观看| 国产猛男猛女超爽免费视频| 亚洲国产成人久久三区| 国产91久久久久久久免费| 3344在线看片免费| 在线aⅴ亚洲中文字幕| 亚洲最大激情中文字幕| 黄在线观看www免费看| 一级毛片在线播放免费| 亚洲无人区视频大全| 亚洲AV网站在线观看|