0
import os
def find_method(name):
        i = 0
        found_dic = { "$_GET":[], "$_POST":[], "include":[], "require":[], "mysql_query":[], "SELECT":[], "system":[], "exec":[], "passthru":[], "readfile":[], "fopen":[], "eval":[] }

        for x in file(name, "r"):
                i += 1
                for key in found_dic:
                        if x.strip().find(key) != -1:
                                found_dic[key].append("LINE:"+str(i)+":" + x.strip())

        print "="*20, name, "="*20
        for key in found_dic:
                if found_dic[key]:
                        print " ", "-"*10, key, "-"*10
                        for r in found_dic[key]:
                               print "  ",r

def search(dirname):
        flist = os.listdir(dirname)
        for f in flist:
                next = os.path.join(dirname, f)
                if os.path.isdir(next):
                        search(next)
                else:
                        doFileWork(next)

def doFileWork(filename):
        ext = os.path.splitext(filename)[-1]
        #if ext == '.html': print filename
        if ext == '.php':
               # print "target:" + filename
                find_method(filename)
  1. 結果だけを印刷するにはどうすればよいですか。ファイルに結果が含まれていなくても、ファイルのすべての名前が出力されます。結果が含まれている場合は、印刷ファイル名を作成したい

  2. これは単語の検索に関するものですが、すべての単語の include like (include の検索) が表示され、文内の単語が検索され、すべての文が出力されます。説明するのは本当に難しいです..理解できることを願っています..すみません

4

2 に答える 2

0

最初の印刷コマンドのインデントに問題があるようです。「name」を印刷していますが、for ループの外にあります。

次の行に沿って、辞書にデータを入力してから、辞書を印刷してみてください。

with open(your_file) as f:
    found_dic = {}
    key = 'your_key'

    # populate the dictionary
    found_dic[key] = [i for i in f if key in i and i not in found_dic]

これを出発点として、必要に応じて結果を辞書にフォーマットできることを願っています。「キー」を含む行のみが found_dic に含まれるため、これらを好きな形式で出力できるはずです。

お役に立てれば

于 2013-04-02T20:58:10.400 に答える
0

それがあなたが求めたものであることを願っています:

for i, line in enumerate(file(name, "r")):
    found = False
    for key in found_dic:
        if key in line.strip():
            found_dic[key].append("LINE:"+str(i)+":" + key)
            found = True

    if found:
        print "="*20, name, "="*20
        for key in found_dic:
            if found_dic[key]:
                print " ", "-"*10, key, "-"*10
                for r in found_dic[key]:
                    print "  ",r

実際に何かを見つけたときにのみ名前を出力したい場合は、何かを見つけたかどうかを確認する必要があります。また、キーは検索対象であるため、5 行目でキーのみを連結します。そして、検索したものだけを追加したい。

さらなる変更: i 行目で enumerate 関数を使用しました。これは、所有する i をインクリメントするよりもはるかに簡単で読みやすいものです。

10 行目の条件も変更しました。ここで in キーワードを使用すると、よりシンプルで読みやすい方法になります...

于 2013-04-02T20:50:59.190 に答える