Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 对于appengine应用程序中过度使用的URL,我能做些什么?_Python 2.7_Google App Engine_Webapp2_Google App Engine Python - Fatal编程技术网

Python 2.7 对于appengine应用程序中过度使用的URL,我能做些什么?

Python 2.7 对于appengine应用程序中过度使用的URL,我能做些什么?,python-2.7,google-app-engine,webapp2,google-app-engine-python,Python 2.7,Google App Engine,Webapp2,Google App Engine Python,我的appengine应用程序(一个分类广告网络应用程序)通过许多不同的IP号码收到许多请求(当前323.2个请求/分钟),这些请求都来自我现在删除的相同URL:s。最好阻止IP号码,但它们通常是不同的IP号码 URI Requests/Minute Current Requests Last 24 hours Runtime MCycles Last hour Average latency Last hour Traces Last

我的appengine应用程序(一个分类广告网络应用程序)通过许多不同的IP号码收到许多请求(当前323.2个请求/分钟),这些请求都来自我现在删除的相同URL:s。最好阻止IP号码,但它们通常是不同的IP号码

URI     Requests/Minute Current Requests    Last 24 hours       Runtime MCycles Last hour       Average latency       Last hour     Traces Last 24 hours
/market/ag9zfm1vbnRhb3Byb2plY3RyDwsSAkFkGICAgOqYrc0KDA/recom    323.2   829,675     32  10,638 ms   View Traces
/vi/5969701968543744.html   292.6   774,964     25  6,530 ms    View Traces
/market/ag9zfm1vbnRhb3Byb2plY3RyDwsSAkFkGICAgLTTq7YKDA/recom    159.8   423,785     34  10,282 ms   View Traces
/vi/5868493903757312.html   149.2   397,066     24  6,497 ms    View Traces 
日志跟踪如下所示

18:59:23.918
GET
404
84 B
74 ms
IE 9
/vi/5969701968543744.html?msgid=msg_sent
182.46.160.242 - - [11/Jan/2017:18:59:23 +0100] "GET /vi/5969701968543744.html?msgid=msg_sent HTTP/1.1" 404 84 http://www.koolbusiness.com/market/ag9zfm1vbnRhb3Byb2plY3RyDwsSAkFkGICAgOqYrc0KDA/recommend "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)" "www.koolbusiness.com" ms=74 cpu_ms=11 cpm_usd=9.387e-9 loading_request=0 instance=00c61b117c9b23bf4ab6026a69ae3bb6b1e412ed8006b8648c1b0d5280223769dbff63ca71fe0aed app_engine_release=1.9.48 trace_id=-
{
 protoPayload: {…}  
 insertId: "5876727c000a14efe5072c1c"  
 httpRequest: {…}  
 resource: {…}  
 timestamp: "2017-01-11T17:59:23.918225Z"  
 labels: {…}  
 logName: "projects/montaoproject/logs/appengine.googleapis.com%2Frequest_log"  
 operation: {…}  
}
它返回一个404,IP号码通常不同,但当我搜索其中一个IP号码时,它被报告为“坏IP”,并且在中国

302看起来像这样,我要修正它,让它返回404

18:59:23.816
POST
302
209 B
139 ms
IE 9
/market/ag9zfm1vbnRhb3Byb2plY3RyDwsSAkFkGICAgOqYrc0KDA/recommend
182.38.139.77 - - [11/Jan/2017:18:59:23 +0100] "POST /market/ag9zfm1vbnRhb3Byb2plY3RyDwsSAkFkGICAgOqYrc0KDA/recommend HTTP/1.1" 302 209 http://www.koolbusiness.com/market/ag9zfm1vbnRhb3Byb2plY3RyDwsSAkFkGICAgOqYrc0KDA/recommend "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)" "www.koolbusiness.com" ms=139 cpu_ms=24 cpm_usd=1.1298799999999999e-7 loading_request=0 instance=00c61b117c9b23bf4ab6026a69ae3bb6b1e412ed8006b8648c1b0d5280223769dbff63ca71fe0aed app_engine_release=1.9.48 trace_id=-
{
 protoPayload: {…}  
 insertId: "5876727c000a14dc603e5441"  
 httpRequest: {…}  
 resource: {…}  
 timestamp: "2017-01-11T17:59:23.816690Z"  
 labels: {…}  
 logName: "projects/montaoproject/logs/appengine.googleapis.com%2Frequest_log"  
 operation: {…}  
}
该类如下所示,我将进行更改,以便在删除内容时返回404

class Recommend(Base2Handler):
    csrf_protect = False

    def post(self, key):
        ad = db.get(db.Key(key))
        email = self.request.POST['tip_email']
        msg = unicode(self.request.POST['tip_msg'])
        if isinstance(msg, unicode):
            msg = msg.encode('utf-8')
        name = self.request.POST['tip_name']
        if isinstance(name, unicode):
            name = name.encode('utf-8')
        title = ad.title
        if isinstance(title, unicode):
            title = title.encode('utf-8')
        host = self.request.host
        senderemail = \
            (users.get_current_user().email() if users.get_current_user() else ('info@montao.com.br'
                                                                                if host.endswith('.br'
            ) else 'Kool Business <info@koolbusiness.com>'))
        recommends = _('has recommended')
        message = mail.EmailMessage(sender=senderemail,
                                    subject='%s %s %s' % (name,
                                                          recommends, title))
        message.to = email
        message.body = '%s %s/vi/%s.html' % (msg, host, ad.key().id())
        message.send()
        matched_images = ad.matched_images
        count = matched_images.count()
        if ad.text:
            p = re.compile(r'(www[^ ]*|http://[^ ]*)')
            text = p.sub(r'<a href="http://\1" rel="nofollow">\1</a>',
                         ad.text.replace('http://', ''))
        else:
            text = None
        #self.response.out.write('Message sent<br>')
        self.redirect('/vi/%d.html?msgid=msg_sent' % (ad.key().id(), ))
还有什么我能做的吗?模型如下所示

class Ad(db.Model):
    cities = db.ListProperty(db.Key)
    regions = db.ListProperty(db.Key)
    blobs = db.ListProperty(db.BlobKey)
    primary_image = blobstore.BlobReferenceProperty()
    usr = db.ReferenceProperty()  # ndb_model.KeyProperty()
    hasimages = db.BooleanProperty(default=False,
                                   verbose_name='has_images')
    userID = db.StringProperty(verbose_name='User ID')
    integer_price = db.IntegerProperty()
    ip = db.StringProperty(verbose_name='ip')
    ipcountry = db.StringProperty(indexed=False, verbose_name='origin')
    tags = db.ListProperty(db.Category)
    category = db.CategoryProperty(verbose_name='Category')
    title = db.StringProperty(verbose_name='title')  # required
    type = db.StringProperty(verbose_name='ContentType')  # sell,wanted,rent,lease,buy
    company_ad = db.BooleanProperty(default=False,
                                    verbose_name='company_ad')  # false or nothing
    user = db.UserProperty(verbose_name='userid')
    im = db.IMProperty(verbose_name='nickname')  # optional, xmpp
    city = db.StringProperty()  # postaladdress should work instead
    region = db.StringProperty()  # postaladdress should work instead
    url = db.StringProperty(verbose_name='url')
    geopt = db.GeoPtProperty(verbose_name='geopt')
    text = db.TextProperty(verbose_name='text')
    currency = db.StringProperty(choices=(
        'INR',
        'EUR',
        'ARS',
        'AUD',
        'BRL',
        'GBP',
        'CAD',
        'CZK',
        'DKK',
        'HKD',
        'HUF',
        'ILS',
        'JPY',
        'MXN',
        'NZD',
        'NOK',
        'PLN',
        'PHP',
        'SGD',
        'SEK',
        'SGD',
        'CHF',
        'USD',
        'THB',
        'TWB',
    ), verbose_name='Currency')
    price = db.StringProperty(verbose_name='price')
    phonenumber = db.PhoneNumberProperty(indexed=False,
                                         verbose_name='phonenumber')  # viewbit
    phoneview = db.BooleanProperty(default=False,
                                   verbose_name='phoneview')
    email = db.EmailProperty(verbose_name='Email')  # optional
    name = db.StringProperty(verbose_name='Name')
    published = db.BooleanProperty(default=True,
                                   verbose_name='published')

打开csrf\u protect肯定会有所帮助。当他们看到自己的帖子没有被处理时,他们会很快放弃

现在,他们可能正试图用暴力在你的网站上发布垃圾邮件

class Ad(db.Model):
    cities = db.ListProperty(db.Key)
    regions = db.ListProperty(db.Key)
    blobs = db.ListProperty(db.BlobKey)
    primary_image = blobstore.BlobReferenceProperty()
    usr = db.ReferenceProperty()  # ndb_model.KeyProperty()
    hasimages = db.BooleanProperty(default=False,
                                   verbose_name='has_images')
    userID = db.StringProperty(verbose_name='User ID')
    integer_price = db.IntegerProperty()
    ip = db.StringProperty(verbose_name='ip')
    ipcountry = db.StringProperty(indexed=False, verbose_name='origin')
    tags = db.ListProperty(db.Category)
    category = db.CategoryProperty(verbose_name='Category')
    title = db.StringProperty(verbose_name='title')  # required
    type = db.StringProperty(verbose_name='ContentType')  # sell,wanted,rent,lease,buy
    company_ad = db.BooleanProperty(default=False,
                                    verbose_name='company_ad')  # false or nothing
    user = db.UserProperty(verbose_name='userid')
    im = db.IMProperty(verbose_name='nickname')  # optional, xmpp
    city = db.StringProperty()  # postaladdress should work instead
    region = db.StringProperty()  # postaladdress should work instead
    url = db.StringProperty(verbose_name='url')
    geopt = db.GeoPtProperty(verbose_name='geopt')
    text = db.TextProperty(verbose_name='text')
    currency = db.StringProperty(choices=(
        'INR',
        'EUR',
        'ARS',
        'AUD',
        'BRL',
        'GBP',
        'CAD',
        'CZK',
        'DKK',
        'HKD',
        'HUF',
        'ILS',
        'JPY',
        'MXN',
        'NZD',
        'NOK',
        'PLN',
        'PHP',
        'SGD',
        'SEK',
        'SGD',
        'CHF',
        'USD',
        'THB',
        'TWB',
    ), verbose_name='Currency')
    price = db.StringProperty(verbose_name='price')
    phonenumber = db.PhoneNumberProperty(indexed=False,
                                         verbose_name='phonenumber')  # viewbit
    phoneview = db.BooleanProperty(default=False,
                                   verbose_name='phoneview')
    email = db.EmailProperty(verbose_name='Email')  # optional
    name = db.StringProperty(verbose_name='Name')
    published = db.BooleanProperty(default=True,
                                   verbose_name='published')