T之家 8 月 4 日消息,安全公司 Trellix 發(fā)布報告指出近來有黑客架設山寨 OneDrive 網站,以“連不上服務”為幌子誘導用戶運行 PowerShell 釣魚命令,從而讓受害者“自己給自己電腦裝上木馬”。
據悉,黑客首先架設山寨 OneDrive 網站,之后向用戶批量發(fā)送帶有 HTML 附件的釣魚郵件,該附件聲稱用戶收到一項名為“Reports.pdf”的文件共享請求,當用戶點擊郵件附帶的鏈接進入“OneDrive 網站”后,相關網站就會聲稱用戶遇到錯誤代碼 Error 0x8004de86,要求用戶“手動更新 DNS 緩存”來解決問題,之后便會提供一系列 PowerShell 命令誘導用戶自己給自己裝上木馬。
IT之家獲悉,在用戶在終端輸入命令后,系統(tǒng)便會自動下載 AutoIT 惡意腳本,在腳本部署完畢后,電腦便會顯示“操作成功”并要求用戶“重新加載網頁”,安全公司提到這樣看似“正常”的操作反倒令受害者難以察覺情況有異。
為了防止此類攻擊,安全公司警告用戶應提高警惕,不要輕易查看來路不明的電子郵件,更不應當點擊這些電子郵件中的附件 / 網頁鏈接,從而減少遭到黑客入侵的風險。
路:
1.創(chuàng)建一個表單來填寫用戶信息(姓名,email,收件人,評論)
2.在views.py文件中創(chuàng)建一個視圖(view)來操作發(fā)布的數據和發(fā)送email
3.在blog應用的urls.py中為新的視圖(view)添加一個URL模式
4.創(chuàng)建一個模板(template)來展示這個表單
Django有一個內置的表單框架允許你通過簡單的方式來創(chuàng)建表單。這個表單框架允許你定義你的表單字段,指定這些字段必須展示的方式,以及指定這些字段如何驗證輸入的數據。Django表單框架還提供了一種靈活的方式來渲染表單以及操作數據。
在blog應用中創(chuàng)建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的字段可選。所有這些也會被考慮到字段驗證中去。
當表單成功提交后你必須創(chuàng)建一個新的視圖(views)來操作表單和發(fā)送email。編輯blog應用下的views.py文件,添加以下代碼:
該視圖(view)完成了以下工作:
· 我們定義了post_share視圖,參數為request對象和post_id。
· 我們使用get_object_or_404快捷方法通過ID獲取對應的帖子,并且確保獲取的帖子有一個published狀態(tài)。
· 我們使用同一個視圖(view)來展示初始表單和處理提交后的數據。我們會區(qū)別被提交的表單和不基于這次請求方法的表單。我們將使用POST來提交表單。如果我們得到一個GET請求,一個空的表單必須顯示,而如果我們得到一個POST請求,則表單需要提交和處理。因此,我們使用request.method=='POST'來區(qū)分這兩種場景。
下面是展示和操作表單的過程:
1.通過GET請求視圖(view)被初始加載后,我們創(chuàng)建一個新的表單實例,用來在模板(template)中顯示一個空的表單:
form=EmailPostForm()
2.當用戶填寫好了表單并通過POST提交表單。之后,我們會用保存在request.POST中提交的數據創(chuàng)建一個表單實例。
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發(fā)送email非常簡單。首先,你需要有一個本地的SMTP服務或者通過在你項目的settings.py文件中添加以下設置去定義一個外部SMTP服務器的配置:
運行命令python manage.py shell來打開Python shell,發(fā)送一封email如下所示:
send_mail()方法需要這些參數:郵件主題,內容,發(fā)送人以及一個收件人的列表。通過設置可選參數fail_silently=False,我們告訴這個方法如果email沒有發(fā)送成功那么需要拋出一個異常。如果你看到輸出是1,證明你的email發(fā)送成功了。
現(xiàn)在,我們要將以上代碼添加到我們的視圖(view)中。在blog應用下的views.py文件中編輯post_share視圖
請注意,我們聲明了一個sent變量并且當帖子被成功發(fā)送時賦予它True。當表單成功提交的時候,我們之后將在模板(template)中使用這個變量顯示一條成功提示。由于我們需要在email中包含帖子的超鏈接,所以我們通過使用post.get_absolute_url()方法來獲取到帖子的絕對路徑。我們將這個絕對路徑作為request.build_absolute_uri()的輸入值來構建一個完整的包含了HTTP schema和主機名的url。我們通過使用驗證過的表單數據來構建email的主題和消息內容并最終給表單to字段中包含的所有email地址發(fā)送email。
現(xiàn)在你的視圖(view)已經完成了,別忘記為它去添加一個新的URL模式。打開你的blog應用下的urls.py文件添加post_share的URL模式如下所示:
在通過創(chuàng)建表單,編寫視圖(view)以及添加URL模式后,我們就只剩下為這個視圖(view)添加模板(tempalte)了。在blog/templates/blog/post/目錄下創(chuàng)建一個新的文件并命名為share.html。在該文件中添加如下代碼:
編輯你的blog/post/detail.html模板(template),在{{ post.body|linebreaks }}變量后面添加如下的鏈接來分享帖子的URL:
請記住,我們通過使用Django提供的{% url %}模板(template)標簽(tag)來動態(tài)的生成URL。我們以blog為命名空間,以post_share為URL,同時傳遞帖子ID作為參數來構建絕對的URL。
現(xiàn)在,通過python manage.py runserver命令來啟動開發(fā)服務器,在瀏覽器中打開 http://127.0.0.1:8000/blog/ 。點擊任意一個帖子標題查看詳情頁面。在帖子內容的下方,你會看到我們剛剛添加的鏈接,如下所示:
度站長平臺提供的死鏈提交工具,可將網站存在的死鏈(協(xié)議死鏈、404頁面)進行提交,可快速刪除死鏈,幫助網站SEO優(yōu)化。在提交死鏈的文件中逐個手動填寫死鏈的話太麻煩,工作中我們提倡復雜自動化,所以本文我們一起交流分享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
大家在使用該腳本時,根據自己服務器情況調整下路徑和字段即可,然后執(zhí)行腳本,:
bash deathlink.sh
3.提交死鏈
執(zhí)行上面腳本時候,就會在指定目錄下生成包含所有獲取的404頁面鏈接的文件,每個連接占一行。例如:
最后在站長平臺提交死鏈頁面中,填寫自己的死鏈文件地址即可,例如:
百度在審核通過之后,會將已經收錄的失效鏈接刪除,以避免失效頁面鏈接對網站造成不良的影響。
*請認真填寫需求信息,我們會在24小時內與您取得聯(lián)系。