T之家 8 月 4 日消息,安全公司 Trellix 发布报告指出近来有黑客架设山寨 OneDrive 网站,以“连不上服务”为幌子诱导用户运行 PowerShell 钓鱼命令,从而让受害者“自己给自己电脑装上木马”。
据悉,黑客首先架设山寨 OneDrive 网站,之后向用户批量发送带有 HTML 附件的钓鱼邮件,该附件声称用户收到一项名为“Reports.pdf”的文件共享请求,当用户点击邮件附带的链接进入“OneDrive 网站”后,相关网站就会声称用户遇到错误代码 Error 0x8004de86,要求用户“手动更新 DNS 缓存”来解决问题,之后便会提供一系列 PowerShell 命令诱导用户自己给自己装上木马。
IT之家获悉,在用户在终端输入命令后,系统便会自动下载 AutoIT 恶意脚本,在脚本部署完毕后,电脑便会显示“操作成功”并要求用户“重新加载网页”,安全公司提到这样看似“正常”的操作反倒令受害者难以察觉情况有异。
为了防止此类攻击,安全公司警告用户应提高警惕,不要轻易查看来路不明的电子邮件,更不应当点击这些电子邮件中的附件 / 网页链接,从而减少遭到黑客入侵的风险。
路:
1.创建一个表单来填写用户信息(姓名,email,收件人,评论)
2.在views.py文件中创建一个视图(view)来操作发布的数据和发送email
3.在blog应用的urls.py中为新的视图(view)添加一个URL模式
4.创建一个模板(template)来展示这个表单
Django有一个内置的表单框架允许你通过简单的方式来创建表单。这个表单框架允许你定义你的表单字段,指定这些字段必须展示的方式,以及指定这些字段如何验证输入的数据。Django表单框架还提供了一种灵活的方式来渲染表单以及操作数据。
在blog应用中创建forms.py
表单可以存在你的Django项目的任何地方,但按照惯例将它们放在每一个应用下面的forms.py文件中
name字段是一个CharField。这种类型的字段被渲染成<input type="text">HTML元素。每种字段类型都有默认的控件来确定它在HTML中的展示形式。通过改变控件的属性可以重写默认的控件。在comment字段中,我们使用<textarea></textarea>HTML元素而不是使用默认的<input>元素来显示它。
字段验证取决于字段类型。例如,email和to字段是EmailField,这两个字段都需要一个有效的email地址,否则字段验证将会抛出一个forms.ValidationError异常导致表单验证不通过。在表单验证的时候其他的参数也会被考虑进来:我们将name字段定义为一个最大长度为25的字符串;通过设置required=False让comments的字段可选。所有这些也会被考虑到字段验证中去。
当表单成功提交后你必须创建一个新的视图(views)来操作表单和发送email。编辑blog应用下的views.py文件,添加以下代码:
该视图(view)完成了以下工作:
· 我们定义了post_share视图,参数为request对象和post_id。
· 我们使用get_object_or_404快捷方法通过ID获取对应的帖子,并且确保获取的帖子有一个published状态。
· 我们使用同一个视图(view)来展示初始表单和处理提交后的数据。我们会区别被提交的表单和不基于这次请求方法的表单。我们将使用POST来提交表单。如果我们得到一个GET请求,一个空的表单必须显示,而如果我们得到一个POST请求,则表单需要提交和处理。因此,我们使用request.method=='POST'来区分这两种场景。
下面是展示和操作表单的过程:
1.通过GET请求视图(view)被初始加载后,我们创建一个新的表单实例,用来在模板(template)中显示一个空的表单:
form=EmailPostForm()
2.当用户填写好了表单并通过POST提交表单。之后,我们会用保存在request.POST中提交的数据创建一个表单实例。
if request.method=='POST':
# Form was submitted
form=EmailPostForm(request.POST)
3.在以上步骤之后,我们使用表单的is_valid()方法来验证提交的数据。这个方法会验证表单引进的数据,如果所有的字段都是有效数据,将会返回True。一旦有任何一个字段是无效的数据,is_valid()就会返回False。你可以通过访问 form.errors来查看所有验证错误的列表。
4如果表单数据验证没有通过,我们会再次使用提交的数据在模板(template)中渲染表单。我们会在模板(template)中显示验证错误的提示。
5.如果表单数据验证通过,我们通过访问form.cleaned_data获取验证过的数据。这个属性是一个表单字段和值的字典。
使用Django发送email非常简单。首先,你需要有一个本地的SMTP服务或者通过在你项目的settings.py文件中添加以下设置去定义一个外部SMTP服务器的配置:
运行命令python manage.py shell来打开Python shell,发送一封email如下所示:
send_mail()方法需要这些参数:邮件主题,内容,发送人以及一个收件人的列表。通过设置可选参数fail_silently=False,我们告诉这个方法如果email没有发送成功那么需要抛出一个异常。如果你看到输出是1,证明你的email发送成功了。
现在,我们要将以上代码添加到我们的视图(view)中。在blog应用下的views.py文件中编辑post_share视图
请注意,我们声明了一个sent变量并且当帖子被成功发送时赋予它True。当表单成功提交的时候,我们之后将在模板(template)中使用这个变量显示一条成功提示。由于我们需要在email中包含帖子的超链接,所以我们通过使用post.get_absolute_url()方法来获取到帖子的绝对路径。我们将这个绝对路径作为request.build_absolute_uri()的输入值来构建一个完整的包含了HTTP schema和主机名的url。我们通过使用验证过的表单数据来构建email的主题和消息内容并最终给表单to字段中包含的所有email地址发送email。
现在你的视图(view)已经完成了,别忘记为它去添加一个新的URL模式。打开你的blog应用下的urls.py文件添加post_share的URL模式如下所示:
在通过创建表单,编写视图(view)以及添加URL模式后,我们就只剩下为这个视图(view)添加模板(tempalte)了。在blog/templates/blog/post/目录下创建一个新的文件并命名为share.html。在该文件中添加如下代码:
编辑你的blog/post/detail.html模板(template),在{{ post.body|linebreaks }}变量后面添加如下的链接来分享帖子的URL:
请记住,我们通过使用Django提供的{% url %}模板(template)标签(tag)来动态的生成URL。我们以blog为命名空间,以post_share为URL,同时传递帖子ID作为参数来构建绝对的URL。
现在,通过python manage.py runserver命令来启动开发服务器,在浏览器中打开 http://127.0.0.1:8000/blog/ 。点击任意一个帖子标题查看详情页面。在帖子内容的下方,你会看到我们刚刚添加的链接,如下所示:
度站长平台提供的死链提交工具,可将网站存在的死链(协议死链、404页面)进行提交,可快速删除死链,帮助网站SEO优化。在提交死链的文件中逐个手动填写死链的话太麻烦,工作中我们提倡复杂自动化,所以本文我们一起交流分享Apache服务中通过shell脚本整理网站死链,便于我们提交。
1.配置Apache记录搜索引擎
Apache是目前网站建设最为主流的web服务,但是apache的日志文件默认是不记录百度、谷歌等各大搜索引擎的爬取程序的,所以首先需要我们设置Apache的配置文件。
找到Apache的配置文件httpd.conf,在配置文件中找到下面两行:
CustomLog "logs/access_log" common #CustomLog "logs/access_log" combined
默认采用的是common,这里我们只需要将common这一行前面加#注释掉,然后将combined这一行前的#去掉即可。然后保存重启Apache服务。
注:如果你的服务器上添加了多个站点,每个站点有单独的配置文件,则我们只需要在相应站点的配置文件中设置CustomLog项即可,例如:
vim /usr/local/apache/conf/vhost/www.chanzhi.org.conf ServerAdmin [email protected] DocumentRoot "/data/wwwroot/www.chanzhi.org" ServerName www.chanzhi.org ServerAlias chanzhi.org ErrorLog "/data/wwwlogs/www.chanzhi.org_error_apache.log" CustomLog "/data/wwwlogs/www.chanzhi.org_apache.log" combined SetOutputFilter DEFLATE Options FollowSymLinks ExecCGI Require all granted AllowOverride All Order allow,deny Allow from all DirectoryIndex index.html index.php
下面是配置前后的网站日志记录格式:
配置前:
配置后:
2.编写shell脚本
我们通过shell脚本获取网站日志中指定爬虫的抓取记录,然后汇总到一个文件中,便于后期使用。代码如下,比如保存为deathlink.sh
#!/bin/bash #初始化变量 #定义蜘蛛UA信息(默认是百度蜘蛛) UA='+http://www.baidu.com/search/spider.html' #前一天的日期(apache日志) DATE=`date +%Y%m%d -d "1 day ago"` #定义日志路径 logfile=/data/wwwlogs/www.chanzhi.org_apache.log-${DATE}.log #定义死链文件存放路径 deathfile=/data/wwwroot/www.chanzhi.org/deathlink.txt #定义网站访问地址 website=http://www.chanzhi.org #分析日志并保存死链数据 for url in `awk -v str="${UA}" '$9=="404" && $15~str {print $7}' ${logfile}` do grep -q "$url" ${deathfile} || echo ${website}${url} >>${deathfile} done
大家在使用该脚本时,根据自己服务器情况调整下路径和字段即可,然后执行脚本,:
bash deathlink.sh
3.提交死链
执行上面脚本时候,就会在指定目录下生成包含所有获取的404页面链接的文件,每个连接占一行。例如:
最后在站长平台提交死链页面中,填写自己的死链文件地址即可,例如:
百度在审核通过之后,会将已经收录的失效链接删除,以避免失效页面链接对网站造成不良的影响。
*请认真填写需求信息,我们会在24小时内与您取得联系。