前端常见面试题之防抖、节流、xss、xsrf

这篇具有很好参考价值的文章主要介绍了前端常见面试题之防抖、节流、xss、xsrf。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、从浏览器地址栏输入url到显示页面的步骤

  1. 输入URL:在浏览器的地址栏中输入要访问的网站的URL(统一资源定位符)。
  2. DNS解析:浏览器会将URL发送给DNS服务器,DNS服务器负责将URL解析为对应的IP地址。
  3. 建立TCP连接:浏览器会根据解析得到的IP地址,使用TCP(传输控制协议)与服务器建立连接。
  4. 发起HTTP请求:TCP连接建立后,浏览器会向服务器发送HTTP(超文本传输协议)请求,该请求携带了浏览器想要获取的资源的信息,如文件路径、请求方式等。
  5. 服务器处理请求:服务器接收到浏览器发送的HTTP请求后,会根据请求的内容进行相应的处理,如查找请求的文件、处理业务逻辑等。
  6. 返回HTTP响应:服务器处理完请求后,会生成对应的HTTP响应,并将响应发送回浏览器。
  7. 接收响应内容:浏览器接收到服务器返回的HTTP响应后,开始接收响应的内容。
  8. 渲染页面:浏览器会根据接收到的响应内容,进行解析、布局、渲染等操作,将服务器返回的页面内容转化为可见的页面。
  9. 显示页面:最后,浏览器将渲染完成的页面显示在用户的屏幕上,用户即可看到访问的网页内容。

二、window.onload和DOMContentLoaded区别

"window.onload"和"DOMContentLoaded"都是JavaScript事件,用于在HTML文档加载完成后执行代码。然而,它们之间有一些不同之处。

  1. 触发时机:
  • "window.onload"事件在整个页面(包括CSS、图像和其他资源)加载完成后触发。
  • "DOMContentLoaded"事件在DOM树构建完成后触发,即HTML文档被解析完成后,不包括样式表、图片和其他外部资源
  1. 执行顺序:
  • "window.onload"事件会等待所有资源(包括图片和其他外部资源)加载完毕后才执行,因此事件触发的时间可能比"DOMContentLoaded"晚。
  • "DOMContentLoaded"事件会在HTML文档解析完成后立即触发,而不需要等待其他外部资源的加载。
  1. 适用对象:
  • "window.onload"事件适用于整个页面加载完成后需要执行的代码。
  • "DOMContentLoaded"事件适用于只需要操作DOM树的脚本,不依赖于外部资源的加载情况。

综上所述,"window.onload"事件适用于需要等待所有资源加载完成后执行的代码,而"DOMContentLoaded"事件适用于只需要操作DOM的脚本,在HTML文档解析完成后立即执行。

三、防抖

JS防抖函数在以下情况下非常有用:

  1. 当用户在页面上连续触发某个事件时,比如连续点击按钮、连续输入搜索关键词等,防抖函数可以确保只有最后一次触发的事件被执行。这可以避免不必要的请求发送或操作执行,提高性能和用户体验。

  2. 当用户在输入框中连续输入内容时,比如搜索框的实时搜索功能,防抖函数可以延迟发送请求或执行搜索操作,直到用户停止输入一段时间才触发,避免多次请求或操作。

下面是一个使用防抖函数的例子,以实现输入框的实时搜索功能:

HTML部分:

<input type="text" id="search-input" placeholder="输入关键词进行搜索" />
<div id="search-results"></div>

JS部分:

// 定义防抖函数
function debounce(func, delay) {
  let timeoutId = null;
  
  return function() {
    // 如果上一次触发事件的定时器还未执行完,则取消上一次的定时器
    if (timeoutId) {
      clearTimeout(timeoutId);
    }
    
    // 设置新的定时器
    timeoutId = setTimeout(() => {
      func.apply(this, arguments);
      timeoutId = null
    }, delay);
  };
}

// 获取相关元素
const searchInput = document.getElementById('search-input');
const searchResults = document.getElementById('search-results');

// 定义搜索函数
function search() {
  const keyword = searchInput.value;
  
  // 发送请求或执行搜索操作
  // ... (省略实际逻辑)
  
  // 更新搜索结果显示
  searchResults.innerText = `正在搜索:${keyword}`;
}

// 使用防抖函数包装搜索函数,并延迟500毫秒触发
const debouncedSearch = debounce(search, 500);

// 监听输入框的输入事件,并使用防抖函数触发搜索
searchInput.addEventListener('input', debouncedSearch);

在上面的示例中,输入框的输入事件被防抖函数包装起来,延迟500毫秒触发搜索操作。当用户连续输入内容时,防抖函数会等待用户停止输入一段时间后才触发搜索,从而避免频繁的搜索操作。这样可以减少不必要的请求发送,提高性能和用户体验。

四、节流

节流函数是一种用于控制函数执行频率的技术,它可以限制函数的调用次数。通常在高频率触发的事件中使用,例如滚动、鼠标移动和窗口调整大小等。

以下是一个使用节流函数的例子:

function throttle(func, delay) {
  let timeoutId;
  
  return function(...args) {
    if (!timeoutId) {
      timeoutId = setTimeout(() => {
        func.apply(this, args);
        timeoutId = null;
      }, delay);
    }
  };
}

// 使用节流函数对滚动事件进行控制
function handleScroll() {
  console.log('Scroll event handled');
}

const throttledScroll = throttle(handleScroll, 200);

window.addEventListener('scroll', throttledScroll);

在上面的例子中,我们定义了一个名为throttle的节流函数。它接受一个需要进行节流的函数func和一个延迟时间delay作为参数。当调用throttle返回的函数时,它会在延迟时间内首次触发func,然后在延迟时间内的连续触发中忽略掉。

在此例中,我们定义了一个名为handleScroll的回调函数,并将其传递给throttle函数以创建一个节流函数throttledScroll。然后,我们通过addEventListenerthrottledScroll函数添加为窗口的滚动事件处理程序。结果是,在滚动事件触发时,handleScroll函数最多每200毫秒执行一次,从而减少了函数执行的次数。

五、如何预防xss攻击

网站的XSS(跨站脚本攻击)是指攻击者利用网站漏洞,将恶意脚本注入到网页中,从而在用户浏览网页时执行恶意代码。这种攻击可以导致攻击者窃取用户的敏感信息、修改网页内容、甚至控制用户的会话。

为了预防XSS攻击,网站开发者可以采取以下措施:

  1. 输入验证和过滤:对用户输入的数据进行过滤,剔除或转义特殊字符,确保只接收到合法的数据。

  2. 输出编码:在将用户输入的数据显示到网页上之前,对其进行编码处理,转义特殊字符,防止恶意代码执行。

  3. 使用CSP(内容安全策略):CSP是一种网页安全机制,通过配置HTTP头部来限制网页中可加载和执行的资源。它可以阻止恶意脚本的注入和执行。

  4. 设置HttpOnly标志:将用户的敏感信息存储在带有HttpOnly标志的cookie中,防止XSS攻击者通过脚本窃取这些信息。

下面是一个XSS攻击的例子:

假设一个社交媒体网站允许用户发布评论,并将这些评论显示在其他用户的浏览器中。攻击者在评论中插入了一个恶意的脚本代码,如以下JavaScript代码:

<script>
  alert("恶意代码执行");
  // 进行其他恶意操作
</script>

当其他用户浏览包含该评论的页面时,恶意脚本会自动执行,弹出一个对话框。这可以导致用户的敏感信息被窃取或进行其他恶意操作。

为了预防这样的攻击,网站可以对用户输入的评论内容进行过滤,将特殊字符进行转义,如将 < 替换为 &lt;,将 > 替换为 &gt; 等。这样即使恶意脚本被注入,也不会被浏览器识别为可执行的代码。同时,网站还应该采取其他措施,如使用CSP来限制加载资源和设置HttpOnly标志来保护用户的敏感信息。

六、如何预防xsrf攻击

跨站请求伪造(Cross-Site Request Forgery,CSRF)是一种攻击方式,攻击者通过欺骗用户在已登录的网站上完成一些未经用户授权的操作,通常是利用用户的身份去执行一些针对该网站的请求。这种攻击方式可能导致账户信息、密码、个人资料泄露,或者进行恶意操作。

为了预防XSRF攻击,可以使用以下方法:

  1. 使用CSRF令牌:在表单中添加一个隐藏字段,该字段包含一个随机产生的令牌。在用户提交表单时,服务器会验证令牌的有效性,如果令牌不匹配,则拒绝请求。

示例:

<form action="/deleteUser" method="post">
  <input type="hidden" name="csrf_token" value="随机生成的令牌" />
  <!-- 其他表单字段 -->
  <input type="submit" value="删除用户" />
</form>
  1. SameSite Cookie属性:使用SameSite属性可以限制Cookie只能在同一站点内进行请求,防止攻击者盗用Cookie进行跨站请求。

示例:

// 设置SameSite属性为Strict
response.setHeader("Set-Cookie", "sessionId=xxx;SameSite=Strict");
  1. 增加验证码:在一些关键操作(如支付、修改密码等)中,可以添加验证码验证,确保用户是真实操作。

总之,防范XSRF攻击的关键是要确保请求的合法性,通过采取以上措施可以有效预防这种攻击。文章来源地址https://www.toymoban.com/news/detail-805242.html

到了这里,关于前端常见面试题之防抖、节流、xss、xsrf的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端】防抖和节流原理+实现

    防抖(Debounce)和节流(Throttle)都是用于控制函数执行频率的机制,它们在处理高频触发的事件时非常有用。 防抖的原理是在事件被触发后,等待一段时间(例如200毫秒)来执行函数,如果在等待时间内事件被再次触发,则重新计时。这样可以避免在短时间内多次触发事件

    2024年04月16日
    浏览(36)
  • 节流防抖:提升前端性能的秘密武器(上)

    🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入

    2024年02月04日
    浏览(39)
  • 前端进阶版本 ,性能优化—-防抖、节流、重绘与回流

    目录 【防抖】 【节流】 重绘(repaint) 回流(reflow):又叫重排(layout) 工作中要如何避免大量使用重绘与回流? 常见的会导致回流的元素 【防抖】 任务频繁触发的情况下,只有任务触发的间隔超过指定间隔的时候,任务才会执行。 【节流】 指定时间间隔内只会执行一次任务。

    2024年02月14日
    浏览(38)
  • 前端解决按钮重复提交数据问题(节流和防抖)

    🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿 🍟欢迎来到前端初见的博文,本文主要讲解在工作解决按钮重复提交数据问题(节流和防抖) 👨‍🔧 个人主页 : 前端初见 🥞喜欢的朋友可以关注一下,下次更新不迷路🥞 当我们在页面进行点点点的操作时,很可能遇到点击两次的行为,

    2024年02月09日
    浏览(70)
  • 了解防抖和节流:提升前端交互体验的实用策略

    本文将重点介绍前端性能优化方法之一的防抖和节流。首先解释了它们的概念和原理,然后探讨了它们在前端开发中的应用场景,如输入框搜索、滚动事件等。最后,通过简单的代码示例展示了如何实现防抖和节流函数。通过学习和应用这两种技术,我们可以有效地减少不必

    2024年02月05日
    浏览(38)
  • 前端性能优化的利器 ——— 浅谈JavaScript中的防抖和节流

    防抖和节流函数是工作中两种常用的前端性能优化函数,今天我就来总结一下什么是防抖和节流,并详细说明一下如何在工作中应用防抖和节流函数 在 JavaScript 中,防抖(debounce)和节流(throttle)是用来限制函数执行频率的两种常见技术。 防抖(debounce) 是指在某个时间段

    2024年02月14日
    浏览(48)
  • 性能优化之防抖

    方法1:利用lodash库提供的防抖来处理 方法2:手写一个防抖函数来处理 需求:鼠标在盒子上移动,鼠标停止500ms之后,里面的数字才会变化+1 方法一:利用lodash库实现防抖 方法二: 手写一个防抖函数来处理 思路:         核心是利用setTimeout定时器来实现         1声明定

    2024年02月08日
    浏览(39)
  • vue3自定义指令之防抖

    我们使用 vue 时,有时候需要用到自定义指令,例如一个防抖指令 现在有一个需求,用户在点击某个按钮时,我不希望用户在疯狂点击后,每次点击都会触发事件,像服务器发送请求,这并不是我们预期的,所以我们需要在用户点击是做防抖处理。那么怎么做到方便复用的解

    2024年02月16日
    浏览(37)
  • Linux常见面试题,应对面试分享

    1.cpu占⽤率太⾼了怎么办? 排查思路是什么,怎么定位这个问题,处理流程 其他程序: 1.通过top命令按照CPU使⽤率排序找出占⽤资源最⾼的进程 2.lsof查看这个进程在使⽤什么⽂件或者有哪些线程 3.询问开发或者⽼⼤,是什么业务在使⽤这个进程 4.是否可以将这台机器隔离,不影响

    2024年02月13日
    浏览(42)
  • 高级前端常见面试题合集

    常见的图片格式及使用场景 (1) BMP ,是无损的、既支持索引色也支持直接色的点阵图。这种图片格式几乎没有对数据进行压缩,所以BMP格式的图片通常是较大的文件。 (2) GIF 是无损的、采用索引色的点阵图。采用LZW压缩算法进行编码。文件小,是GIF格式的优点,同时,

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包