推荐 | 10个好用的Web日志安全分析工具 - Bypass - 博客园

mikel阅读(157)

来源: 推荐 | 10个好用的Web日志安全分析工具 – Bypass – 博客园

经常听到有朋友问,有没有比较好用的web日志安全分析工具?
首先,我们应该清楚,日志文件不但可以帮助我们溯源,找到入侵者攻击路径,而且在平常的运维中,日志也可以反应出很多的安全攻击行为。

一款简单好用的Web日志分析工具,可以大大提升效率,目前业内日志分析工具比较多,今天推荐十个比较好用的Web日志安全分析工具。

1、360星图
一款非常好用的网站访问日志分析工具,可以有效识别Web漏洞攻击、CC攻击、恶意爬虫扫描、异常访问等行为。一键自动化分析,输出安全分析报告,支持iis/apache/nginx日志,支持自定义格式。
下载地址:https://wangzhan.qianxin.com/activity/xingtu


2、LogForensics
TSRC提供的一款日志分析工具,可从单一可疑线索作为调查起点,遍历所有可疑url(CGI)和来源IP。
相关下载地址:https://security.tencent.com/index.php/opensource/detail/15


3、GoAccess
一款可视化 Web 日志分析工具,通过Web 浏览器或者 nix 系统下的终端程序即可访问。能为系统管理员提供快速且有价值的 HTTP 统计,并以在线可视化服务器的方式呈现。
官网地址:https://www.goaccess.cc/



4、AWStats

一款功能强大的开源日志分析系统,可以图形方式生成高级Web,流媒体,ftp或邮件服务器统计信息。
官网地址:http://www.awstats.org/


5、Logstalgia
一款非常炫酷且可视化日志分析工具,可以直观的展示CC攻击和网站的日志分析,并以可视化的3D效果展示出来。
下载地址:http://www.softpedia.com/get/Internet/Servers/Server-Tools/Logstalgia.shtml



6、FinderWeb
程序员的看日志利器,支持,tail, less, grep,支持超大的文本文件,从几M到几十G的日志文件都流畅自如。
下载使用:http://www.finderweb.net/download.html


7、web-log-parser
一款开源的分析web日志工具,采用python语言开发,具有灵活的日志格式配置。
github项目地址:https://github.com/JeffXue/web-log-parser

8、ELK
开源实时日志分析的ELK平台,由ElasticSearch、Logstash和Kiabana三个开源项目组成,在企业级日志管理平台中十分常见。
下载使用:https://www.elastic.co/cn/elastic-stack

9、Splunk
一款顶级的日志分析软件,如果你经常用 grep、awk、sed、sort、uniq、tail、head 来分析日志,那么你可以很容易地过渡到Splunk。
下载地址:https://www.splunk.com/zh-hans_cn/download/splunk-enterprise.html



10、IBM QRadar
Qradar有一个免费的社区版本,功能上和商用版本差别不大,适合小规模日志和流量分析使用。
下载地址:https://developer.ibm.com/qradar/ce/

vue中子组件的methods中获取到props中的值方法(vue 学习笔记)_vue 获取props的值-CSDN博客

mikel阅读(84)

来源: vue中子组件的methods中获取到props中的值方法(vue 学习笔记)_vue 获取props的值-CSDN博客

说一下为什么会有这个需求:如果不需要处理props的值直接用,是不用这么麻烦的,
直接在页面上用{{name}}就好了。在做项目的时候由于要对props的值做处理后才能使用,当我在methods、mounted 用this.xxx,发现取出来的值是空对象,有点疑惑
于是就上网查了原来:
通过这个方法传过来的值,在子组件mounted函数中如果直接去获取的话有可能会获取不到。因为此时父组件的值还没有传过来,但是如果你是写在methods中的方法中获取值的话,此时值已经传过来了,可以直接使用this.name获取到。 如果你想要在子组件的mounted()中获取传值的话最好做个延迟或者是监听,但是又有一点,为啥我在页面中使用{{name}}没有问题呢! 这就是vue的好处它是等到这个name值有变化的时候就会更新的。所以才会看到显示。(其实先是空然后值传过来了,就会加载上去。)
https://segmentfault.com/q/1010000014590428 (原文链接)
解决方法,直接上代码了:
父组件代码:
<template>
// 将photoList 传给子组件
  <div class=”home”><photo-view :photoList=”photoList”></photo-view></div>
</template>
<script>
import PhotoView from ‘./components/PhotoView’
import axios from ‘axios’
export default {
  name: ‘Home’,
  components: {
    PhotoView
  },
  data () {
    return {
      photoList: []
    }
  },
  mounted () {
    this.getPhotoInfo()
    this.getPushText()
  },
  methods: {
    getPhotoInfo () {
    // 获取后台数据通过getPhotoInfoSucc得到photoList
      axios.get(‘./mock/photo.json’)
        .then(this.getPhotoInfoSucc)
    },
    getPhotoInfoSucc (res) {
      res = res.data
      if (res.data) {
        const data = res.data
        this.photoList = data
        console.log(data)
      }
    }
  }
}
</script>
子组件代码:
<template>
</template>
<script>
export default {
  name: ‘PhotoView’,
  props: {
    photoList: Array
  },
  data () {
    return {
      newPhotoList: [],
    }
  },
  //监听photoList的值,当它由空转变时就会触发,这时候就能取到了,拿到值后要传值到data的newPhotoList中
  watch: {
    photoList: function (newData) {
      this.newPhotoList = newData
      this.getPhotoList(this.newPhotoList)
    }
  },
  methods: {
    getPhotoList (res) {
    console.log(this.newPhotoList)
  }
}
</script>
这里是参考https://www.jianshu.com/p/cdc90de5b1cf
个人学习笔记,如有误,请指教,谢谢
————————————————
                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/baidu_38942289/article/details/115552354

The data property “xxx“ is already declared as a prop. Use prop default value instead.-CSDN博客

mikel阅读(57)

来源: The data property “xxx“ is already declared as a prop. Use prop default value instead.-CSDN博客

在写父组件子组件相互传递数据的时候,出现The data property “num” is already declared as a prop. Use prop default value instead.

这里意思是这个data的属性num已经在prop声明了,使用prop默认的值替代。因为num我在父组件已经创建声明后面又在子组件的data声明和初始化,造成冲突。

 

所以报这个错,然后需要把子组件的那个data函数里的num删除或者换个不重复的名字,便可以解决报错。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/caseywei/article/details/108062924

uni-app父子组件间的方法调用及传值_uniapp调用组件内部的方法-CSDN博客

mikel阅读(70)

来源: uni-app父子组件间的方法调用及传值_uniapp调用组件内部的方法-CSDN博客

uni-app父子组件间的方法调用及传值

方法调用:

一、父组件调用子组件里的方法

1. 先准备一个子组件

<template>

<view></view>

</template>

 

<script>

export default {

data(){

return {}

},

methods:{

childMethod() {  // 子组件中有一个childMethod方法

console.log(‘childMethod do…’)

}

}

}

</script>

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

2. 准备一个父组件

<template>

<view class=”content”>

<mian-index ref=”mainindex”></mian-index> //使用子组件,ref给子组件一个id标识

</view>

</template>

<script>

import mainindex from ‘@/pages/main/index/index.vue’  //引入子组件

export default {

data() {

return {

 

};

},

components:{

‘mian-index’:mainindex

},

onLoad(e) {

this.$refs.mainindex.childMethod();  //页面加载时就调用子组件里的childMethod方法

}

}

</script>

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

参考地址:https://www.cnblogs.com/cap-rq/p/11026881.html

 

二、子组件调用父组件里的方法

2.1. 准备一个父组件

<template>

<view class=”father”>

<child v-on:ToChange=”change”></child>  // 在使用子组件时,通过v-on绑定在父组件内定义好的方法

</view>

</template>

 

<script>

import child from ‘../../components/child’  //引入子组件

export default {

methods: {

change(){  // 在父组件内定义好的方法

console.log(“触发了父页面内的方法”);

},

},

components:{

child

}

}

</script>

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

2.2. 在准备一个子组件

<template>

<view @tap=”changeC()”>  // 在子组件内绑定触发子组件内定义的方法

子组件

</view>

</template>

 

<script>

export default {

methods:{

changeC(type){

this.$emit(“Tochange”);  // 通过this.$emit触发父组件内绑定的方法

console.log(“触发了子组件内的方法”);

}

}

}

</script>

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

参考地址:https://blog.csdn.net/Sport_18/article/details/102833209

 

传值:

 

三、父组件给子组件传值

3.1. 父组件:

<template>

<view>

<test :msg=”msg”></test>  // :msg=”msg”绑定传值

</view>

</template>

 

<script>

import test from “@/components/test/test.vue”  // 引入子组件

export default {

data () {

return {

msg: ‘hello’

}

},

components: {test}

}

</script>

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

3.2. 子组件:

<template>

<view>

子组件 {{msg}}  //接收后使用

</view>

</template>

 

<script>

export default {

props: [‘msg’]  //通过props接收数据

}

</script>

 

<style>

</style>

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

四、子组件给父组件传值

4.1. 父组件

<template>

<view>

<test @myEvent=”getMsg”></test>

</view>

</template>

<script>

import test from “@/components/test/test.vue”   // 引入子组件

export default {

methods: {

getMsg (res) {

console.log(res)

}

},

components: {test}

}

</script>

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

4.2.子组件

<template>

<view>

<button type=”primary” @click=”sendMsg”>给父组件传值</button>

</view>

</template>

 

<script>

export default {

data () {

return {

status: ‘hello uni-app’

}

},

methods: {

sendMsg () {

this.$emit(‘myEvent’,this.status)  // 通过$emit触发事件,第二个参数就是传递的参数

}

}

}

</script>

————————————————

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

 

原文链接:https://blog.csdn.net/weixin_40816738/article/details/124774664

uni-app 页面顶部栏固定悬浮的 css 兼容方法 - DCloud问答

mikel阅读(51)

来源: uni-app 页面顶部栏固定悬浮的 css 兼容方法 – DCloud问答

uni-app 中 NavigationBar(导航栏 44px)以及 TabBar(底部选项卡 50px)组件的高度是固定的,不可修改,各小程序平台,包括同小程序平台的 iOS 和 Android 的高度也不一样。

泪雪博客

那么如果我们需要悬浮导航菜单则需要使用 position: sticky 来使其悬浮,然后对于 H5 平台加上 top:44px 的高度,这样 uni-app 页面顶部导航栏的固定悬浮就实现了兼容,具体的代码如下:

复制代码.menu {  
    position: sticky;  
    /* #ifdef H5 */  
    top: 44px;  
    /* #endif */  
    /* #ifndef H5 */  
    top: 0;  
    /* #endif */  
    z-index: 999;  
    flex: 1;  
    flex-direction: column;  
    overflow: hidden;  
    background-color: #ffffff;  
}

以上代码纯属子凡开发中简单的需要稍微注意的地方,仅供大家学习参考。

其中 position: fixed 虽然也可以悬浮固定,但是底部的元素就无法继承 top 的值了,可以简单说 fixed 是特殊版的 absolute,fixed 元素总是相对于 body 定位的。所以就需要使用 position: static,static(没有定位)是 position 的默认值,元素处于正常的文档流中,会忽略 left、top、right、bottom 和 z-index 属性。

除非注明,否则均为泪雪博客原创文章,禁止任何形式转载

本文链接:https://zhangzifan.com/uni-app-navigationbar-position-static.html

uniapp 添加顶部搜索导航_typeerror: uni.onnavigationbarsearchinputclicked i-CSDN博客

mikel阅读(71)

来源: uniapp 添加顶部搜索导航_typeerror: uni.onnavigationbarsearchinputclicked i-CSDN博客

(记得提前引入字体样式)
1.在 pages.json里面配置搜索界面(这里member为主页):
{
            “path” : “pages/member/member”,
            “style” : {
“app-plus”:{
“scrollIndicator”:”none”,//隐藏滚动条
“titleNView”:{
//搜索框配置
“searchInput”:{
“align”:”center” ,//居中
“backgroundColor”:”#f7f7f7″,
“borderRadius”:”50rpx”,
“placeholder”:”请搜索文字”,
“placeholderColor”:”red”,   //默认字体颜色
“disabled”:true    //不希望输入文本
},
//左右2个按钮
“buttons”:[
//左边图标
{
“color”:”#FF9619″,
“colorPressed”:”#BBBBBB”,
“float”:”left”,
“fontSize”:”40px”   ,//文字大小
“fontSrc”:”/static/font/icon.ttf”,
“text”:”\ue609″
},
//右边图标
{
“color”:”#000000″,
“float”:”right”,
“fontSrc”:”/static/font/icon.ttf”,
“text”:”\ue653″
}
]
}
}
}
        },
2.在主页member.vue    加入监听搜索框点击事件,当点击搜索导航就会跳转到搜索页
//监听搜索框点击事件
onNavigationBarSearchInputClicked(){
// console.log(“打开搜索页”)
//跳转到搜索页
uni.navigateTo({
url:”../search/search”
})
},
遇到问题:如果没有加入参数”disabled”:true    则不能跳转
3.搜索页布局配置(在 pages.json里面)
{
            “path” : “pages/search/search”,
            “style” : {
“app-plus”:{
“scrollIndicator”:”none”,//隐藏滚动条
“titleNView”:{
“autoBackButton”: false, //去掉返回按钮,未生效bug
//搜索框配置
“searchInput”:{
“align”:”left” ,
“backgroundColor”:”#f7f7f7″,
“borderRadius”:”50rpx”,
“placeholder”:”请搜索文字”,
“placeholderColor”:”red”,   //默认字体颜色
“disabled”:false
},
“buttons”:[
//取消按钮
{
“color”:”#000000″,
“float”:”right”,
“fontSize”:”40rpx”,
“text”:”取消”
}
]
}
}
}
        }
4.点击取消按钮,返回到上一层(在search.vue中配置)
<script>
export default{
data(){
return{
};
},
//监听原生标题导航点击事件
onNavigationBarButtonTap(e){
if(e.index==0){
uni.navigateBack({
delta:1
})
}
},
}
</script>
5.2个监听事件接口  search.vue中修改(//监听搜索框文本变换,监听点击搜索按钮事件)
<script>
export default{
data(){
return{
};
},
//监听原生标题导航点击事件
onNavigationBarButtonTap(e){
if(e.index==0){
uni.navigateBack({
delta:1
})
}
},
//监听搜索框文本变换
onNavigationBarSearchInputChanged(e) {
console.log(“监听文本搜索变化”+JSON.stringify(e.text))
},
//监听点击搜索按钮事件
onNavigationBarSearchInputConfirmed(e) {
console.log(“监听点击搜索事件”+JSON.stringify(e.text))
}
}
</script>
————————————————
                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_45200726/article/details/108616708

uni.switchTab()跳转不刷新页面问题_currentpage.onload is not a function-CSDN博客

mikel阅读(103)

来源: uni.switchTab()跳转不刷新页面问题_currentpage.onload is not a function-CSDN博客

uni.switchTab()跳转不刷新页面问题

大家应该都遇到过,调转到 tabBar 里面的页面时,只能使用 uni.switchTab() 或者是 uni.navigator() 跳转,
使用 uni.reLauch() 或者是 uni.redirect() 无效,但是她们都存在一个共同的问题,就是,无法刷新页面和数据,uni.switchTab() 后面也是不可以带参数的,带参数无效,接下来就告诉大家我试了很多方法得出的结论。

我是需要从修改个人中心跳转到个人中心界面,

相信大家很多人百度这个问题,解决方案都是点击按钮时

但是页面会报错 page.onLoad is not a function 并且不会请求接口,所以页面无法刷新

 

还有人会使用 this.$forceUpdate(); 但是页面并不会刷新,在vue脚手架中确实可以刷新页面,但是uniapp中没有效果
最后的解决方案,就是在跳转的时候,调用
window.location.reload();

 

这样可以在跳转的同时刷新页面,改代码必须写在要跳转的点击事件里面,放在mounted或者是onLoad里面,会一直刷新页面,出现死循环。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_43665443/article/details/114398927

uniapp数据存储在本地,获取和移除。_uniapp存储数据到本地-CSDN博客

mikel阅读(81)

来源: uniapp数据存储在本地,获取和移除。_uniapp存储数据到本地-CSDN博客

uniapp数据存储在本地,获取和移除,两种方法,异步和同步,推荐使用同步
html代码
<template>
<view>
<button type=”default” @click=”setStorage”>数据缓存到本地</button>
<button type=”primary” @click=”getStorage”>获取数据</button>
<button type=”warn” @click=”removeStorage”>移除数据</button>
</view>
</template>
数据存储异步
//缓存数据
setStorage(){
//这是一个异步接口
uni.setStorage({
key: ‘id’,//本地缓存中的指定的 key
data: 80//需要存储的内容,只支持原生类型、及能够通过 JSON.stringify 序列化的对象
})
},
数据存储同步
//缓存数据
setStorage(){
//这是一个同步接口。建议使用这个方法
//第一个参数本地缓存中的指定的 key
//第二个参数需要存储的内容
uni.setStorageSync(‘id’,100);
},
获取数据异步
getStorage(){
//这是一个异步接口
uni.getStorage({
key:’id’,//本地缓存中的指定的 key
success(res) {//接口调用的回调函数,res = {data: key对应的内容}
console.log(res.data)
}
})
},
获取数据同步
getStorage(){
//这是一个同步接口。建议使用这个方法
//参数本地缓存中的指定的 key通过赋值给一个变量获取
const value = uni.getStorageSync(‘id’);
console.log(value);
},
数据移除异步
removeStorage(){
//这是一个异步接口
uni.removeStorage({
key: ‘id’,//本地缓存中的指定的 key
success(res) {//接口调用的回调函数
console.log(‘移除成功’);
}
})
}
数据移除同步
removeStorage(){
//这是一个同步接口。建议使用这个方法
//参数本地缓存中的指定的 key通过赋值给一个变量获取
const value = uni.removeStorageSync(“id”);
console.log(“移除成功”);
}
id从本地缓存移除
————————————————
                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/abcdebb/article/details/124211243

uniapp底部弹出层(uni-popup)使用技巧_uniapp从底部弹出一个盒子-CSDN博客

mikel阅读(73)

来源: uniapp底部弹出层(uni-popup)使用技巧_uniapp从底部弹出一个盒子-CSDN博客

官网:uni-popup 弹出层 | uni-app官网 (dcloud.net.cn)
底部弹出的使用技巧工作中常用
1.一般app和小程序的弹窗都是在底部弹出,例如:
2.如何实现(简单实用)?
   uni-popup组件,我用vue3的时候是不用引入的,vue2需要先引入到项目中
怎么使用?记得先import导入和 components注册一下, 如何从底部弹出,圆弧怎么搞?
注意: import的文件位置正确,ref绑定的名称和this.$ref.后面的名称一致
<template>
<view>
<button @click=”open”>打开弹窗</button>
<uni-popup ref=”popup” type=”bottom”>
            <view class=”test-popup”>你好,底部弹出</view>
        </uni-popup>
</view>
</template>
<script>
import uniPopup from ‘@/uni_modules/uni-popup/components/uni-popup/uni-popup.vue’
    export default {
        components: {
uniPopup
},
       methods:{
          open(){
            // 通过组件定义的ref调用uni-popup方法 ,如果传入参数 ,type 属性将失效 ,仅支持
            //[‘top’,’left’,’bottom’,’right’,’center’]
            this.$refs.popup.open(‘bottom’)//底部弹出
          }
     }
}
</script>
<style lang=”scss”>
    .test-popup{
        background: white;//默认全屏时灰色,只需要把你需要的部分改成白色
        border-radius: 20px;//设置弧度的大小
        height: 200px;
    }
</style>
————————————————
                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_63553261/article/details/136150039