『python爬虫』formhash 与 跨站请求伪造(CSRF)攻击


欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中

1. 什么是跨站请求伪造(CSRF)攻击?

跨站请求伪造(CSRF)攻击是一种网络安全漏洞,攻击者利用用户当前已认证的会话来执行未经用户授权的操作。攻击者通过诱使受害者点击包含恶意请求的链接或访问恶意网站,从而利用受害者当前的身份验证信息(如 Cookie 或其他认证凭证)来发送未经授权的请求,比如执行转账、更改密码等操作。

CSRF 攻击的典型场景包括以下步骤:

  • 受害者登录了一个网站,并且保留了登录状态。
  • 攻击者诱使受害者访问包含恶意请求的页面,比如点击了带有恶意链接的邮件、访问了恶意网站等。
  • 页面中的恶意请求会利用受害者当前的身份验证信息,比如 Cookie,来执行一些操作,比如发起银行转账、更改密码等。

2. 防御 CSRF 攻击的措施

  • 使用随机生成的 token:在表单提交时,向表单中插入一个随机生成的 token(即 formhash 等),服务器收到请求时验证该 token 的有效性。
  • 同源检测:服务器端可以检查请求的来源是否与当前网站的域名相匹配,如果不匹配则拒绝请求。
  • 验证 HTTP Referer 头:服务器端可以验证请求的 HTTP Referer 头部,确保请求来自合法的来源。
  • 对于网站开发者和管理员来说,保护用户免受 CSRF 攻击的影响是非常重要的。同时,用户也应当保持警惕,避免点击怀疑链接,尤其是包含个人敏感操作的链接。

3. 在爬虫反爬中的具体应用 - formhash

formhash通常用于网页中的表单提交。

在网络应用程序中,为了防止跨站请求伪造(CSRF)攻击,开发者会在表单中包含一个名为 formhash 的隐藏字段。formhash 是一个随机生成的字符串,每次表单提交时都会生成一个新的值。

在服务器端,当接收到带有 formhash 字段的表单提交请求时,开发者会验证 formhash 的值是否与当前用户会话中存储的值匹配。如果匹配成功,说明该请求是合法的,否则可能被视为 CSRF 攻击而被拒绝。

因此,formhash 的作用是增加表单提交的安全性,确保请求来自合法的来源。

需要注意的是,每个网站的实现方式可能略有不同,formhash 的名称和具体实现方式可能会因网站而异。

具体实战中应用示例[requests实战-精易论坛自动签到(保姆级图文+实现代码)]


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2023 mzh

Crated:2023-3-1

欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
『未完待续』


  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 这是一段Python代码,可以实现mcbbs的自动签到:import requests# mcbbs 的登录地址 url_login = 'https://www.mcbbs.net/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1'# 这里填写你的mcbbs用户名和密码 data = {'username': 'your_username', 'password': 'your_password'}# 发送登录请求,并携带上面的参数 response = requests.post(url_login, data=data)# 签到的地址 url_sign = 'https://www.mcbbs.net/plugin.php?id=dsu_paulsign:sign'# 发送签到请求 response = requests.get(url_sign) ### 回答2: 要实现mcbbs的自动签到,可以使用Python的requests库和BeautifulSoup库进行网页请求和网页解析。 首先,需要导入需要的库: ``` import requests from bs4 import BeautifulSoup ``` 然后,通过requests库发送GET请求,获取签到页面的HTML代码: ``` url = 'https://www.mcbbs.net/' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } response = requests.get(url, headers=headers) ``` 接下来,使用BeautifulSoup库解析HTML代码,找到签到按钮所在的元素,提取需要的数据: ``` soup = BeautifulSoup(response.text, 'html.parser') sign_button = soup.find('a', class_='xi2') formhash = soup.find('input', attrs={'name': 'formhash'})['value'] ``` 然后,构造POST请求数据,并发送签到请求: ``` data = { 'formhash': formhash, 'fastreply': '0', 'handlekey': 'checkin', 'signsubmit': 'yes' } response = requests.post(url, headers=headers, data=data) ``` 最后,检查签到是否成功,并输出结果: ``` if '您的签到排名' in response.text: print('签到成功!') else: print('签到失败!') ``` 以上就是使用Python实现mcbbs的自动签到的代码。注意,在实际使用中可能需要根据网页的更新进行相应的修改。 ### 回答3: 要用Python写一段代码实现mcbbs的自动签到,首先需要了解mcbbs网的签到机制和相关页面的网址。 首先,我们可以使用`requests`库发送POST请求来模拟用户的登录,获取登录后的Cookie信息。这可以使用如下代码实现: ```python import requests login_url = "http://www.mcbbs.net/member.php?mod=logging&action=login" data = { "username": "Your_Username", "password": "Your_Password", "fastloginfield": "username" } response = requests.post(login_url, data=data) cookies = response.cookies ``` 接下来,我们需要找到签到的网址。通常在mcbbs网上,签到的链接会以"/plugin.php?id=k_misign:sign&operation=qiandao"结尾。我们可以使用`urljoin`来拼接完整的链接,如下所示: ```python from urllib.parse import urljoin base_url = "http://www.mcbbs.net/" sign_url = urljoin(base_url, "/plugin.php?id=k_misign:sign&operation=qiandao") ``` 然后,我们可以使用获取到的Cookie信息来发送GET请求来实现签到的操作,如下所示: ```python response = requests.get(sign_url, cookies=cookies) ``` 最后,我们可以检查一下签到的结果。通常在mcbbs网上,签到成功会返回一段包含"成功"的提示信息。我们可以使用`in`关键字来检查提示信息中是否包含"成功",如下所示: ```python if "成功" in response.text: print("签到成功!") else: print("签到失败!") ``` 综合以上代码,就可以实现mcbbs的自动签到功能了。需要注意的是,为了能够成功签到,需要提供正确的登录用户名和密码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发现你走远了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值