วันหนึ่งคุณเป็น Blogger ไร้กังวล วันถัดมา เลทับกับ GDPR สิ่งใหญ่โหดร้าย EU จัดการ Regulation ใหม่เน้น Privacy: GDPR กำหนดข้อกำหนด Privacy, Security, Data Transparency สำคัญสำหรับเว็บไซต์จัดการ Personal Data คุณถาม: ส่งผลต่อผมไหม? และกังวล บทความวันนี้ช่วยเข้าใจ Who, What, When, How ให้ความรู้และเครื่องมือ กลายเป็น Blogger ไร้กังวลอีกครั้ง AND Compliant อย่างมีความสุข
คำถามเพิ่ม: ทำไมเผยแพร่หลัง Regulation บังคับใช้แล้ว? คำตอบ: เครื่องมือ/บริการส่วนใหญ่ปล่อย GDPR-compliant Updates เพิ่งสัปดาห์ผ่านมา จึงรวบรวม Guide ได้ มาดูกัน
สารบัญ
- Disclaimer
- GDPR ใน 60 วินาที
- ถ้าคุณประมวลผล Personal Data?
- ไม่ได้เกี่ยวกับ Fines
- ติดตาม Data Flow
- Connection to a Website
- Loading a Page
- Google Analytics
- Google Analytics & Personal Data
- Google Analytics & Local Storage (Cookies)
- IP Address Anonymization
- ถ้าอยากเก็บ Data (หรือใช้ Cookies)?
- Additional Google Analytics Reading
- Google Custom Search Engine
- Google Adsense
- ShareThis Buttons
- Matched Content
- ประเภท Data อื่นๆ
- E-commerce Forms/Buttons (PayPal)
- User Registration
- Comments
- Email (และ Mailing Lists)
- Embedded Videos (YouTube)
- Embedded Scripts
- Content Management Systems (CMS): WordPress
- Data Collection = Plugins
- Google Analytics
- Comments (Disqus)
- Disqus & WordPress Database Integration
- General Script Control
- Wp_enqueue_script
- Wp_deregister_script
- Session Cookies
- WordPress 4.9.6 - GDPR Changes
- Data Backups
- Encryption Tools
- Documentation
- Conclusion
- Resources
Disclaimer
เริ่มจากการชี้แจงสำคัญ:
ผมไม่ใช่ทนายความ ไม่ควรตีความบทความนี้เป็น Legal Advice ใดๆ
ผมอาจผิดหรือหลงผิด อย่าเชื่อข้อมูลด้านล่างแบบโมฆะ
บทความนี้สำหรับ Individual รัน Website/Blog ไม่ใช่ Companies
GDPR ใน 60 วินาที
ยังไม่ได้ยิน/อ่าน GDPR นี่คือเวอร์ชันสั้นที่สุด General Data Protection Regulation (GDPR) คือ EU Regulation ใหม่เรื่อง Data Protection และ Privacy บังคับใช้ 25 พฤษภาคม 2561 ให้ Transparency และ Choice เพิ่มเติมรอบ Personal Data Handling ของพลเมือง/Resident EU/EEA กำหนด Business ต้องมี Safeguards และ Clarifications เพิ่มเติม ว่าจัดการ เก็บ ใช้ Personal Data ยังไง เน้น Personal ไม่ใช่ Personal = ไม่ใช่ปัญหา
GDPR ใช้กับใครก็ตามที่ Handle, Store, Use Personal Data ถ้าจะถามว่า Regulation นี้ apply กับคุณ (Individual มี Blog เล็กๆ เรื่องทำอาหาร/ท่องเที่ยว/ซ่อม IT) คำตอบอยู่ที่: คุณ Handle, Store, Use Personal Data ของ EU/EEA Citizens/Residents?
คำตอบคำถามนั้น NOT Trivial
ถ้าคุณประมวลผล Personal Data?
ก่อนจะบอก Yes/No สมมติ Quick Yes ก่อน
GDPR ไม่ห้าม Data Processing - ต้องการ Transparency และ Protection เพิ่ม คือ ต้อง Justify Reasons ใช้ Personal Data อธิบาย Why/How และมี Mechanisms ปกป้อง Data ข้อกำหนดกว้างๆ:
- Need to Know - Handle Data ควรมี Reason
- Privacy - Handle Data พยายามทำให้ Less Personal
- Security - Handle Data ต้อง Secure
อ่านออนไลน์ คนเยอะ Upset รอบ Data Handling สมมติ Data Handling ผิด ควรหลีกเลี่ยง Approach ถูกต้อง: Excessive/Unnecessary Data Handling ควรหลีกเลี่ยง
ถ้าต้องการ Personal Data บางชิ้น คุณต้องการ มันถูกต้อง มี Legitimate Business Interests ใช้ได้ GDPR มาเพราะ Business เยอะเล่น Personal Data โดยไม่มี Core Business Need จริง จึงมี Privacy Scandals ที่อ่านมา ตัวอย่าง: ธุรกิจช่างประปา ต้องรู้อายุ/สนใจทางสังคม ลูกค้า? ไม่ แต่ขายเสื้อ ต้องรู้ เพศ อายุ ที่อยู่ ส่งสินค้า? ใช่
ถ้า Handle Data ทำให้ Transparent (Need to Know) และ Protect ใช้ Anonymization (ทำ Personal ให้ Non-personal) และ Encryption (ทำ Personal Data Less Visible/Accessible)
ไม่ได้เกี่ยวกับ Fines
Fines ตัวเลขน่ากลัว แต่ Focus Fines = Wrong Approach ไม่เช็ค Law และ Punishment แล้วค่อยตัดสิน Right/Wrong ไม่หลีกเลี่ยงขโมยเพราะโทษจำคุกนาน ไม่ทำเพราะมันผิด เหมือนกัน ไม่ปฏิบัติตาม GDPR เพราะ Fines มองเป็น Opportunity สร้าง Online Presence ดีกว่า Transparent
Process นี้อาจเจ็บปวดและ Costly กลับไปที่คำถามเดิม: Personal Data จัดการอยู่ไหม?
ติดตาม Data Flow
หลาย Level Clarification ตอบคำถามข้างต้น:
- อะไร Classify เป็น Personal Data?
- Website คุณมี Mechanism Collect Personal Data?
คำถามย่อย 1 ไม่ Trivial Personal Data คือ อะไรที่ Identify Person ได้ เช่น Legal Terminology ความหมายคลุมเครือ Best Answer: ไม่แน่ใจ/มี Doubt ให้ Assume ว่า "Ambiguous" Piece นั้น เป็น Personal Data ได้
ตัวอย่าง: IP Address คอมพิวเตอร์ Technical Terms = เบอร์โทรศัพท์ หมายเลข (Address) ให้คอมพิวเตอร์สื่อสาร Identify Device Unique ใช่ สามารถ ใต้ Certain Circumstances ใช้ Identify Person เหมือนเบอร์โทรศัพท์ Trace ไป Contract/Bill
มันคือ Inseparable Piece ของ Internet Communication ที่นี่ Battle Technology vs Law เข้ามา เพราะนี่ Privacy Regulations (หรือต้อง) Ambiguous สร้าง Headache/Worry โดยเฉพาะ Less Tech-savvy คนวันหนึ่งอยากแชร์สูตรอาหาร วันถัดมา ต้องคิด IP Addresses
นี่นำไปสู่ Sub-question 2 Blogger ส่วนใหญ่ไม่ Setup Infrastructure เอง ใช้ Platform ของคนอื่น - Blogging Platform, Website Built by Contractor อาจไม่รู้ Background เกิดอะไรบ้าง
ที่นี่เราต้อง Follow Data Trail
ถ้าอยากรู้ GDPR Apply กับ Site/Blog - และถ้า Apply ต้องทำอะไร Compliant - Follow Internet Traffic Journey - จาก Curious User ไป Site ของคุณ
Connection to a Website
ไม่รายละเอียด Technical เข้า Website dedoimedo.com Browser ใช้ Internet Address Book (DNS) หา dedoimedo.com บน Internet แล้ว Contact Address ถ้าทุกอย่าง OK Web Server Software Accept Request Return Info เป็น Web Pages เช่นอ่านอยู่
Initiate Connection Web Server Browser ส่ง Info จำเป็น: IP Address, OS, Browser Version, Additional Data แต่ละ Browser มี Signature (User Agent) ช่วย Web Server ให้ Content ดีที่สุด
Web Servers Log Connections ใน Data Logs บ่อยครั้ง Must สำหรับ: 1) Security Reasons Trail หาก Hack/Fraud 2) Technical Problems 3) Web Traffic Balancing 4) Compliance/Auditing
กล่าวถึง IP Address มี Personal Info อยู่แล้วใน Server Logs GDPR เข้าเล่น แต่ Wait ต้องเข้าใจเต็มว่า Apply จริงไหม คำถาม:
- คุณมี Access Web Server Logs?
- ถ้ามี มี Control Over Logs Creation/Archive?
เหตุผลคำถาม: มี 2 ประเภท Web Services กว้างๆ: Own Servers หรือ ใช้ Servers ของคนอื่น = Hosting จ่ายเงิน Hosting Provider Setup/Maintain Web Server บ่อยครั้ง Shared Services GoDaddy, Digital Ocean, Media Temple ฯลฯ
Own Website = Complicated แต่ Tech-savvy เพราะ Setup Web Server ไม่ง่าย
จ่าย Hosting Company ให้ Infrastructure Setup Blog GDPR Responsibility ไม่ใช่แค่คุณ Hosting Provider ก็มี Responsibility เพราะ Control Infrastructure
No Access Server Logs = Not Your Concern มี Access (บาง Provider ให้ Limited Access) มี Control? ไม่น่าเป็น Control ได้ Logs Security Reasons OK
แต่คุณใช้ Web Server Logs?
อาจไม่สร้าง Logs/ตัดสินใจ Log อะไร แต่ Hosting Provider อาจให้ Read Access Blogger บางคนใช้ AWStats Analyze Web Server Statistics Open-source Log Analyzer อ่าน Parse Data จาก Web Server Logs สร้าง Graphs/Charts Hourly/Daily/Weekly/Monthly Traffic Visits Duration Domains Countries Top-hitting Traffic รวม IP Addresses
ถ้าทำเช่นนั้น = Processing Personal Data = ต้อง GDPR Compliant
AWStats 例子 好 因為 Popular 但開啟 Follow-up: Processing Personal Data 有 Safeguards Data Protection? Share Site Statistics Publicly?
AWStats Simple/Friendly แต่ Store Data Plain Text ปัญหา GDPR Stipulates Enhanced Privacy/Protection เรากล่าว Anonymization/Encryption AWStats ไม่ Satisfy
ถ้าใช้ AWStats (หรือคล้าย) ต้องดูว่ามี Option De-select Info เช่น IP Addresses และ Parsed Data เก็บใน Encrypted Files ไหม ถ้าไม่ ควร NOT Analyze Web Server Logs หากมี Access เพราะ Transfer GDPR Responsibility จาก Hosting Provider ไปคุณ Not Fun แต่จะพูด Site Statistics อื่นๆ ต่อไป
Loading a Page
Connected Server ได้ Page Display Browser มองจากอีกด้าน User Connect Site Show Browser ถ้าไม่รู้ Site ทำอะไร Work Top-down หา Background
Web Page ทุกหน้า มี Visible Portion (เห็น) และ Invisible - Web Language Directives/Declarations/Scripts HTML/CSS Load JS Scripts
Follow Loading 任何 Page ใน Browser ด้วย Advanced Developer Tools Modern Browsers Firefox/Chrome มี Right-click > Inspect เปิด Tech Stuff Console Show Sequence Loaded Resources Backend ของ Pages ต่างจาก Visible Part
Example: dedoimedo.com Static Site No User Interaction No Registered Users No Comments Limited Data Exchange 但 Even Seemingly Innocent Site มี Data-collection Vectors หลายอย่าง
Page Loading Flow (Visible/Invisible):
- Page Header (Title, Description)
- Google Analytics (Website Traffic Analysis)
- Google Custom Search Engine (Search Content on Site)
- Main Content (Article Text/Images)
- Google Adsense (Ad Blocks Inline)
- More Main Content
- ShareThis Buttons (Sharing Buttons Social Networks)
- Matched Content (Google Code Related Articles + Ads)
- Cookie Control Script (Overlay Applet User Choose Cookies)
Google Analytics
Web Server Logs บางคนมี/ไม่มี Access บางคนมี/ไม่มี Technical Knowledge Setup Manual Analysis Tools ที่นี่ Google Analytics เข้ามา Popular Site Traffic Statistics Tool Config 簡單: เพิ่ม Code ทุก Page Done! คุณชนะ Google ชนะ เพราะชอบ Data
Google Analytics มี Code หลายแบบ: เดิม Urchin (urchin.js) Deprecated แต่ Active (Backward Compatibility) Successor: Universal Analytics (analytics.js) 近期 Global Site Tag (gtag.js) Features เพิ่ม Methods อื่นๆ 3 Main Code Snippets:
Urchin (urchin.js):
<script src="https://www.google-analytics.com/urchin.js" type="text/javascript"></script>
<script type="text/javascript">
_uacct = "UA-xxxxxx";
urchinTracker();
</script>
Universal Analytics (analytics.js):
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-xxxxxx', 'auto');
ga('send', 'pageview');
</script>
Global Site Tag (gtag.js):
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-xxxxxx"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-xxxxxx');
</script>
Default Snippets เปลี่ยน xxxxxx เป็น GA Code Default GA Set Cookies Collect Info ต้องเข้าใจ: a) Cookies คืออะไร? b) Collected Info เป็น Personal?
Focus: Code You Run และ Stuff Inside GA Simple Answer: Default GA ไม่ Config สำหรับ Personal Data Analysis นอกจาก IP Address Google ทำงานเยอะ ทำ Tools GDPR-compliant สะท้อนใน Options ใน GA Admin Dashboard
Personal Data Collection มาหลาย Vectors ใช้ ต้อง Notify EU Users ขอ Consent Collect Data คือ Execution Analytics Script Dependent User Choice ไม่ยอม = Script ไม่ Run = ไม่มี Statistics User นั้น
Choice:
- Collect Personal Data Pending Consent; อาจ Collect น้อย (ทฤษฎี 0 จาก EU)
- Not Collect Personal Data - GDPR Clauses ไม่ Apply
Google Analytics & Personal Data
Run GA As Non-personal Site Traffic Statistics Tool มี Visits, Pages, Real-time Traffic Metrics ไม่มี User Info ทำอะไรใน GA Dashboard Online Google มี FAQ รายละเอียด
GA Allow Advertising/Remarketing = Personal Data ปิด Off
ตั้ง Retention Policy (Old Data Deleted) ไม่ทำ Analysis Historic Data (Before Retention Period) แต่ Minimize Data Processing Good Err on Side of Caution Privacy Conscious
User-ID Step Google ห้าม Data Identify People ใช้ Feature นี้ ต้องขอ Consent ตั้ง Off
Custom Dimensions/Metrics ที่ Identify People ไม่ควรมี เพราะ Move Non-personal Space ไป Personal Space มีก็ได้ แตเป็น Topic แยก ตอนนี้ Focus Anonymous Non-personal Data Collection GA
Google Analytics & Local Storage (Cookies)
Cookies = Text Files Local Computer Websites Create Continuity Online Activity Log Files บอก Last Visit, Login ฯลฯ Way Sites Remember You มาใหม่ยัง Login อยู่ Websites Set Cookies Expiration Date ลบ/Erase Activity History
Technically Cookie Info อาจ Identify People ต้องขอ Consent Set Cookies ไม่ยอม = Cookies Must Not Set
GA Set Cookies หลายตัว ต้องขอ Permission แต่ Complicated: ถ้าขอ Consent Cookies Initial Set Page Load GA Allowed Run จะ Set Cookies During Session ต้องขอ Consent 不僅 Set Cookies แต่ Run GA 最初 กลับไป Site Statistics ไม่อนุญาต = Visits ไม่นับ (Non-personal Part) Statistics EU Traffic น้อยลง
อยาก Run GA 無 Personal Data Collection ต้อง Disable Cookies และ Handle IP Address Part + Online Work ทั้งหมด
IP Address Anonymization
GA Capture IP Addresses = Personal Info แต่ Anonymize IP ได้ เพิ่มบรรทัด ก่อน GA Event ส่ง Server เพิ่มหลัง 'create' และ 'send' (Universal Analytics):
ga('set', 'anonymizeIp', true);
เช่น:
ga('create', 'UA-xxxxxx', { 'storage': 'none' });
ga('set', 'anonymizeIp', true);
ga('send', 'pageview');
ตอนนี้มี Anonymous Non-personal Data Collection via GA
Downside: ไม่รู้ User Loyalty Bounce Rate 100% Avg Session Duration 0 seconds แต OK เพราะ EXACTLY What We Want Aggregate Non-personal Traffic Data Only
ถ้าอยากเก็บ Data (หรือใช้ Cookies)?
ทำให้ GA Script Load Dependent Explicit User Consent ต้องการ Tool (Script อีกตัว) Block GA Execution และ Cookies จนกว่า (และถ้า) User Consent
ผมเลือก Civic Cookie Control Tool ออกแบบ Cookie Compliance GDPR Requirements Listed on Google Cookie Choices ทดสอบ Solutions บางตัว เลือกตัวนี้ Adequate สำหรับ Needs
Cookie Control PRO Version Filter Non-EU Countries Applet ไม่แสดง User ไม่ได้รับ GDPR 影響 Free Version Limited PRO 不 便宜 回到 最初: GDPR Compliance Cost Money, Time, Expertise Individual Bloggers/Site Owners ไม่มี
Implemented Cookie Control ทุกหน้า เลือก Wording, Styling, Categories สำคัญ: แต่ละ Category มี 2 Functions: onAccept และ onRevoke Former Run Code (Set Cookies) ONLY If User Consent Latter Delete Cookies Stop Scripts If No Consent Config Tool นี้ Out of Scope
ถ้าอยาก Run GA + Cookies ทุกหน้า EU Declaration 克利 (Universal Analytics Example):
onAccept : function(){
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-xxxxxx', 'auto');
ga('send', 'pageview');
},
onRevoke: function(){
window['ga-disable-UA-xxxxxx'] = true;
}
แสดง Option Block Scripts เพิ่ม นอกจาก Cookie Control [sic] จะ見 Example 稍後 CMS WordPress
Cookie Control Script Declared ทุกหน้า Control Third-party Content ไม่ใช่ GA เพราะเลือก Anonymous Non-personal Route Added Code ทุกหน้า:
<script src="https://cc.cdn.civiccomputing.com/9/cookieControl-9.2.min.js"></script>
<script>var config = { apiKey: '3d26a534992cc77791b5baf9525828de5a1213b9', product: 'PRO_MULTISITE', text: { title: 'This site uses cookies.', intro: 'Dedoimedo.com has been designed for ...
LINES REMOVED FOR BREVITY
... onRevoke: function(){}, thirdPartyCookies: [{"name": "ShareThis", "optOutLink": "https://www.sharethis.com/privacy/"}]}, initialState: "OPEN", position: 'RIGHT', theme: 'LIGHT'}; CookieControl.load( config );</script>
Additional Google Analytics Reading
Resources Section มีเพิ่ม แต่ที่นี่ Additional Things Consider และ Consider = Inform Users Choice Make Browsing Private Opt-out Data Collection ไม่แค่ Site ของคุณ แตทั่วไป
Google Analytics Opt-Out Browser Add-on
Google Custom Search Engine
Google CSE Code เพิ่มใน Pages ให้คน Search Content Site/Globally Visual: Search Box ใช้เหมือน Google Search 問題: มี Personal Data Collection?
<script>
(function() {
var cx = 'partner-pub-123456789:123456789';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<div class="gcse-searchbox-only"></div>
Tricky Part: Google CSE Display Ads ทำให้ Tie Into Google Adsense (ยังไม่พูด) But General: Google CSE เป็น Ad Feature เพราะ Generated Through Google Adsense Dashboard 有 Personal Data Aspect และ Cookies 知道 Handle Cookies ต้องพูด Ads
Google Adsense
Google Adsense Ad Network ยอดนิยมโลก คล้าย Google Tools 簡單 ใช้: เพิ่ม Code Snippets Pages Users Visit อาจเห็น Ads 問題: Handle Personal Data?
2 Types Ads: Non-personal (Random) และ Personal (Targeted User Behavior/Metrics) Allow Personal Ads via Adsense = By Proxy Handle Personal Data Consent Run Adsense Scripts 難กว่า GA One: Ad Placement Important Unlike Analytics Code Anywhere Action Invisible User Two: No Consent = Ads No Run/Show Consent = Ad Blocker = Less Revenue Publisher
Google รู้ จึง提供 Central Tool Configure Ads Serve EU Users 近期 Before May 25 GDPR Enforcement Google Introduce Section ใน Adsense Dashboard: Serve Only Non-personal Ads to EU Users Ideal Way Every Tool/Service Should Handle Alas Not Always Possible
EU User Consent Tab 解釋: 仍需 讓 Users Consent Cookies 覆蓋 Search Engine Implementation 因為 Cookies Shared CSE Display Ads 回ไป คำถาม: ใช้ Non-personal Ads EU ขอ Consent Cookies ครอบคลุม Section นี้
ShareThis Buttons
Visual Revamp Website Early 2018 เพิ่ม ShareThis Inline Buttons Script หน้าเว็บ เพิ่ม User Engagement 內容 Functionality 2 Pieces: HTML Element Buttons และ Background Script
Unfortunately - 見 Throughout Article - ShareThis Release GDPR Update May 25, 2018 Too Late ผม Wait ไม่ได้ Implement Beforehand Conditional Loading via Cookie Control 類似 GA (with Cookies) Example User Consent = Buttons Show + Cookies Set No Consent = No Show Compliant Implementation
Lose Sharing/Engagement Traffic แต Implementation Compliant
Place Script As-is OnAccept ไม่ได้ Syntax ต่างเล็กน้อย 適用 Any JS Script:
onAccept : function(){var file=document.createElement('script');
file.setAttribute("type","text/javascript");
file.setAttribute("src", "//platform-api.sharethis.com/js/sharethis.js#property=
5a3a29849d192f001374331f&product=inline-share-buttons");
document.getElementsByTagName("head")[0].appendChild(file);},
Abstract Manner:
function(){
var file=document.createElement('script');
file.setAttribute("type","text/javascript");
file.setAttribute("src", "SCRIPT HERE");
document.getElementsByTagName("head")[0].appendChild(file);
}
Test New ShareThis 不 Ideal: Own Overlay Window (Clash Cookie Applet) Granularity Control User Consent 不夠 (我的意見) Accept Loss Sharing Traffic for Compliance Another Example Regulation Interfere Ongoing Activities (Bounce Rate/Session Duration GA No Cookies)
Matched Content
คล้าย CSE/Adsense Code Matched Content Generated ใน Adsense Dashboard Same Rules Apply Non-personal Ads EU Consent Cookies All Set
Other Types of Data
Examples เล็กน้อย Embedded Content/Scripts 可能有 Shopping Cart Next Data Type
Interact Users 不只 Words/Images Seen Invisible Scripts (Background) Cookies Visible Third-party Content (Search/Ads/Share) 不 Process Deliberate Personal Info
E-commerce Forms/Buttons (PayPal)
Example: PayPal Popular Online Payment Integration Dead Simple Copy/Paste Code Pages Users Buy/Donate Button Authenticate Username/Password Transaction Data/Money Exchange
GDPR Terms 考慮:
- Load PayPal Form Compliant?
- PayPal Set Cookies? Hint: Yes. แต่ Allowed Tamper?
- Users Send Payments Provide Personal Info Then What?
Compliance: Short Answer Yes People Agree PayPal T&C 使用 Form/Button = Agreed PayPal Access Info 你 Not Privy Data UNLESS Transaction Made แล้ว Small Part Shared 你 Need Business Reasons (Tax Declarations) Need Not Disputed (Like Receipt/Invoice) Touch Data Handling More
PayPal Financial Institution Data Collection Mandatory Security/Fraud Prevention 使用 Services (或 E-commerce Platform) 不 多少 Say
Form/Button Loaded Script Run Log Security Info Form Set Cookie - 不為 Your Domain 但 paypal.com Situation: Non-optional 到目前 我們 Could Ask Consent 或 Use Scripts Non-personal 但 這裡 Cannot Control Necessary Cookie Required Form Work PayPal Do Their Thing Options: Allow Form Load (No Tampering) 或 Not Have It 但 May Lose All Business
Necessary Data Collection for Security Reasons Cookie Control Tools Cannot Delete PayPal Objects Even If Want Browser Work: Domains Delete Cookies Themselves Only Open Site Page 不能 Tamper Cookies Other Sites Makes Sense 不想 任何人 Steal Session Login Data
Situation 做什麼? Transparent About It 使用 Service 解釋 Users How/What Data Collected Refer Relevant Privacy Policy
Answered 2 Questions Last: 現在 有 Personal Data Financial Transactions Site Necessary Data (Like Necessary Cookies E-commerce Platform) Need Use Data Tax Reports 即 Transfer Data PayPal (Security Measures Safeguard Data) To Your Machine (Desktop/Laptop/Phone) Now What?
記住 2 Major Aspects Data Collection: Anonymization 和 Encryption First: Minimize Data Collection (Make Non-personal) 做ไป大部分 Steps 但 End Up Data Core Business Cannot Anonymize Further (Raise Flag Tax Authorities) No Problem Protect Data
Download Form/Report PayPal (或 E-commerce Platform) 你 Responsible For It 必須 確保 Data Always Safe 意味著: Accidentally Lose/Stolen 必須 Make Retrieval Personal Info Difficult Encryption 來 玩
Encryption = Mathematical Process Render Human-readable Data Random Bits No Meaning Cannot Decipher Without Proper Key Good Encryption Near Impossible Break Conventional Computing 且 GDPR-compliant 你 Sole Owner Encryption Key Only You Open Data 其他人 Possession Data = Useless
Bottom Line: Offline Copy Data Outside Original Source (PayPal Online Console) Encrypt Data Open Only Necessary Exchange (Accountant, Tax Authorities) Last Step 有時 Require Send Personal Data Email/Physical Mail Necessary Legal Purposes Unavoidable But OK Other Businesses/Entities Handling Personal Data 也有 GDPR Compliance Piece 包括 Email Provider, Accountant, Government Minimize Actions Maintain High Security (Vague Term Elaborate Later) See Encryption Section
User Registration
Site อาจ有 Registration Form ปกติ Name/Email Fields Data Saved Database 有 Functionality 問題:
- Really Need Registered Users? Answer Could Be Yes
- What Info Need From Users? Registration Form 'Slim' Enough?
- Know Database Location, Access, Edit, Secure?
Back to Anonymization/Encryption Make User Data Less Personal (Without Hurting Blog/Site) Do It Keep Data Somewhere Encrypt It Most People: Encrypt SQL Database Shared Provider Complex But Not Alone Provider Responsibility Services: Robust/Secure
Additional GDPR Responsibility: Handle User Data
- Know Where User Data Stored
- Know How Access (Delete If Necessary)
- Backup Data (Computer, Cloud, Other Servers) Need Encryption Backups
Struggle: Hire Professional (Money, Trust, Beware Scams) Otherwise Not Best Position GDPR Compliance Sounds Tough/Cruel Think: Clueless User Data Handling Mechanisms 真的 Want People Use Services? 站在鞋子 他們 Trust Site No 'Idea' Data Handling?
Last Piece: Data Transfer Possess Personal Data Bear Responsibility Safekeeping Selling/Giving Data Without Explicit Permission = Big No-no Worst: 'Accidentally' Give Away Data Without Aware Service Site Might Crawl/Index User Database 不知情
Active User Data Collection Complex Passive Services Enabled Background Requires Effort 更多 CMS 討論
Comments
Logic 類似 User Registration 本質上 Identical Users Provide Personal Info True: Choice Register/Write Comments 但 Responsibility Let Them Know Intent Data Use Revisit Later Detail
Email (และ Mailing Lists)
Data Privacy 有趣หลายเหตุผล First: Email Almost Unavoidable Online Sites/Blogs Definitely Contact Info People Reach You Every Email Received Add Data Points Collection
Emails Contain Personal Data 典型 Email Include:
- IP Address Last Mail Server (Chain Sender to You)
- Cases: Sender IP Address
- System/Mail Client Signature
- User Email Address (Obviously)
- Name/Alias (Real/Fictitious)
- Actual Contents (Any Personal Data)
Emails Normally Not Encrypted Message Readable If Possess Mail Message Wait Don't Panic Ominous 但 Not Plain Text Mail Systems Use Additional Encryption Connection/Send Data Discuss Soon
Okay, Now What?
Address 2 Main Topics: 1) Receiving/Sending Email 2) Storing Email Info
First: No Control Some Data Receive Email Mail Protocols Dictate Basic Fields (Functionality/Security) Publicly Accessible Email = No Control Who Contacts/Why = Consent User Behalf
GDPR Compliance: Initiate Contact Others Via Email Need Consent Users 有 Registration/Comments = Registered Users = Access Email Addresses
Possession Data NOT Give Right Send Users Info (Marketing/Advertising/Promotion) Unless Approve Think: Sign In Write Comment ≠ Want Spam Newsletter Agree Newsletter Separately
Simple: Use Email Intended Purpose Only:
- Someone Writes You Write Back Fine Communication Exchange
- Registers: Use Email User Management: Verification, Account Notifications, Comment Notifications, Password Reset
- Send Users OTHER Info: Ask Consent Like Cookies
Black Magic Email Exchange Use Mailing Lists Newsletters Build Lists Explicit User Approval Simple
Second Part: Data Handling Email Data Like Other Personal Data Keep Safe Similar E-commerce Data Keep Emails Legal/Accounting Reasons Secure/Auditable:
- Access: 2 Ways Primary: 1) Web Browser 2) Dedicated Mail Client (Outlook/Thunderbird) Both Cases Secure Layer (https:// Browser, Secure Ports Mail Client Config e.g. Port 465 TLS/SSL) Cases: Option 2FA Harder Hacking Login
- Storage: Inbox Safe Online Provider (Including Hosting) Due Diligence Responsibility Safeguard Data Add Security 2FA Possible Most Important: Offline Copy Inbox (Any Mail Client) Keep Mailbox Encrypted Location (You Sole Owner Encryption Key) More Encryption Later
Sum Up:
- Use Email As Intended (Reply, Account Support, Mailing Lists - Each Own Consent)
- Protect Emails (Secure Connection, Encrypted Local Storage, Additional Online Safeguards)
Embedded Videos (YouTube)
YouTube Embed Videos Pages 不錯 但 有 Range Things YouTube Videos Combine Elements: Tracking Element (Video Recommendations) Ads Shown Users (Preferences) Cookies More 選擇 Embed = Must Understand Videos Profile Users Viewing Personal Data Involved = Ask Consent 而且 2 Types Embedded Videos: Flash-based (Old) Native HTML5 (New) Big Difference
Flash-based Video:
<object width="680" height="412">
<param value="https://www.youtube.com/v/EWrJqUtYW7Y" name="movie" />
<param value="window" name="wmode" />
<param value="true" name="allowFullScreen" />
<embed width="680" height="412" wmode="window" allowfullscreen="true" type="application/x-shockwave-flash" src="https://www.youtube.com/v/EWrJqUtYW7Y"></embed>
</object>
HTML Version:
<iframe width="560" height="315" src="https://www.youtube.com/embed/KHG6fXEba0A" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
คำถาม: ทำไงให้ Videos GDPR-compliant?
First: Flash Clips (Adobe Flash Player) General: Flash Technology Probably Not Best Way Forward Online Videos 10+ Years Hugely Popular Preferred Method Embed Interactive Multimedia Web Pages 但 Gently Phased Out Recent Years Security Issues Flash Player และ Modern Browsers Support Native HTML5 Video
Flash Clips May Set Cookies - 不只是 Ordinary Cookies - Flash Cookies 類似 Regular Web Cookies 但 Stored Separately Exclusively Adobe Flash Player 可能 ไม่มี Straightforward Control Cookie Control Tools 做:
- Re-embed Existing Clips Old Format Convert New Format
Leaves Familiar Data Collection/Cookies Luckily YouTube Enhanced Privacy Feature Sharing Click Share Video Online Option Embed Video Tick Box "Enable Privacy-enhanced Mode" Generates Different Embed Code Set No Cookies
Privacy-enhanced Code:
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/KHG6fXEba0A" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
這樣 - YouTube (Google) No Longer Third-party Ad Serving/Pixel Tracking GDPR Compliance 我們 Privacy-enhanced Mode No Cookies = User-friendly Embedded Videos Otherwise Ask Consent As Before
Lastly: Non-standard Non-Youtube Flash Clips Pages:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase=
"https://active.macromedia.com/flash5/cabs/swflash.cab#version=5,0,0,0" height="550" width="690">
<param name="movie" value="video.swf">
<param name="play" value="true">
<param name="loop" value="false">
<param name="quality" value="low">
<embed src="video.swf" quality="low" loop="false" type=
"application/x-shockwave-flash" pluginspage=
"https://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=
ShockwaveFlash" height="550" width="690">
</object>
No Easy Solution 不 aware Trivial Ways Limit Flash Clips/Disable Cookies By Design Publicly Available Best Recommendation: Upload YouTube Offer New Privacy-enhanced Embed Options 可能 不能 用 YouTube/Sharing Platforms Legal/Content Reasons 那麼 Separate Disclaimer 或 Remove Clips
Embedded Scripts
Embed Other Content Pages Non-Videos Polls, Maps Scripts JS (something.js) Best Way Handle (Want/Need) Ask Consent Similar ShareThis Buttons Whatever Tool OnAccept Function Include:
function(){
var file=document.createElement('script');
file.setAttribute("type","text/javascript");
file.setAttribute("src", "SCRIPT HERE");
document.getElementsByTagName("head")[0].appendChild(file);
}
Content Management Systems (CMS): WordPress
Section นี้ น่าสนใจ คนอ่านเยอะ WordPress Popular Website/Blogging Management System World 易用 相對易配置 Plugins 靈活/有用 示範 WordPress But Note: Other CMS Exist: Drupal, Joomla!, Magento, phpWiki...
WordPress Released First GDPR-ready Version 4.9.6 May 17, 2018 Wpbeginner.com Guide GDPR May 23, 2018 (2 Days Before Enforcement) My Testing/Implementation Shows Differences 所以 Share Details Changes/Settings ทำ The Lost Words (Book-writing Site) Compliant
The Lost Words Simple WordPress Site No User Registration Comments Enabled Disqus Plugin (Instead Organic Comments) GA via MonsterInsights Plugin (Mentioned Guide) Disabled Both Plugins Prior GDPR Enforcement Implemented Alternative Methods Compliance Explain Exactly What/How
Journey Same Earlier - Now WordPress Establish Connection Site Understand Data Flow Open Dashboard Examine Installed/Activated Plugins
Data Collection = Plugins
ใช้ WordPress Plugins 可能 Collect Data, Possibly Personal Data Simplest Verify: Read Privacy Policy (If Exists) Need Tech Knowledge Understand Better Core WordPress GDPR-compliant ≠ Plugins/Activities Compliant
My Case: Several Plugins Installed Some No Personal Data Collect (Excluded) Mostly Security Hardening Tools Make Site Robust Some Configurable Collect Data (Like Web Server Logs/GA Options) Some Definitely Collect Personal Data 3 Groups:
- Plugins No Personal Data Collect (Excluded)
- Plugins Can Collect Data - Configure Non-personal Use, 或 Collect Personal Data But Inform Users Give Consent Option Situations Data Necessary Discover Soon
- Plugins Collect Data - Must Ask Users Consent
Google Analytics
GA Website Traffic Statistics = Group 2 Seen How Use GA Anonymous Non-personal Data Collection Here: Run Script Without Personal Data But With Cookies Combine Both
Implemented Conditional Loading GA Based User Consent via Cookie Control (Shown Earlier) Ask Users Consent Yes = Script Run + Cookies Set Still Use IP Anonymization Cookie Control 有 Example Exactly Purpose Easy Setup See Earlier Copy/Paste Snippet
Why Not MonsterInsights?
Practicality 和 Timelines 原本 MonsterInsights Configured Non-personal Data Collection (Except Cookies) Before GDPR-ready Update Plugin Now EU Compliance Tool Configure Everything (Automatically) Addon Cost Money Invested Money Different Cookie Control Solution (Handles Scripts Too)
Reading: Plugin Handles IP Anonymization, Disables UserID Tracking, Disables Author Tracking (Custom Dimension) Manual Handle Possible But Advantage Plugin: Changes Only Apply EU Visitors GA Account Changes = Global MonsterInsights Integrates Cookie Plugins 不知道 Conditional Loading Script
Me: Changes Late - Most GDPR Tools Short Week Before Enforcement Hardly Enough Test Properly Moreover: Ask Users Consent Cookies (Although No Local Storage Option) Could Also Load GA Conditionally via Cookie Control Already Purchased Multi-site License
Practicality 真的 Use MonsterInsights (Extra Cost) Integrate Cookie Control Plugins 或 Invest Money Different Tool (Like Me) Handle This Way Advantage: Control Additional Scripts/Cookies 不 具體 GA 如 ShareThis Buttons
Comments (Disqus)
Used Disqus Comments Unfortunately Disqus Release Update May 25, 2018 Too Late Disabled Comments Blog Decided Re-introduce Later After Ascertain WordPress Comments/Disqus Compliant
Before GDPR Update Disqus Tried 'Intercept' Disqus via Cookie Control onAccept/onRevoke Valuable Lesson Discuss Shortly Now Disqus Introduced GDPR Measures Login/Post Comment First Agree New Privacy Policy Already Logged In = No Comments Field Until Agree Option Opt-out Tracking User (Using Disqus) Downside: Temporary Session Logins Login Anew Each Time
Disqus & WordPress Database Integration
Default Disqus 不 Write User Comments Database Manual Configure That Do Comments Added Database Had Non-personal Database Until Now Now Personal Data Treat Accordingly Example: Non-encrypted Database Backups Now Encrypted Address Backups Section
General Script Control
Additional Plugins/Scripts WordPress Site 可能 無 GDPR Accessories Collect Personal Data = Block Execution Until User Consented Similar ShareThis Buttons Outline Earlier Need 2 WordPress Functions: wp_enqueue_script() 和 wp_deregister_script()
Wp_enqueue_script
Run Scripts On Demand Usage Far From Trivial Know Script Need Run Wrap wp_enqueue_script Place OnAccept Section Cookie Control Tool Like Earlier
Difficult Part: Actually Finding Script Need Run Back to Web Console Browser Figure Out Site Doing No Easy Way Especially Plugins Behave Odd/Undocumented Justin Tadlock Discussed 2009 Extremely Valuable Advice Conditional Script Like:
wp_enqueue_script( 'contact-form-7', wpcf7_plugin_url( 'contact-form-7.js' ), array('jquery', 'jquery-form'), WPCF7_VERSION, $in_footer );
Wp_deregister_script
Opposite Enqueue Remove/Stop Script Like:
add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );
function my_deregister_javascript() {
wp_deregister_script( 'contact-form-7' );
}
Session Cookies
WordPress (Plugins/Themes) May Set Session Cookies Again Need Consent Like Before
WordPress 4.9.6 - GDPR Changes
No Point Repeat Million Times Briefly: WordPress Additional Tools Manage User Data Registered Users: Delete Them, Privacy Policy Template
Data Backups
Talked Backups Earlier Emails/Databases General: Fair Chance Backup Site Data (User Data Along) Healthy Recommended Practice Should Have Backups By All Means Ensure: Anonymization 和 Encryption
Anonymization Covered Already (By Design) Encryption Next Step Any Data Backup Should Go:
- Secure, Trusted, DOCUMENTED Location
- Not Accessible Anyone But You
Best Way: Encrypt Backups Own Tool/Key (Password) Then Someone Access Data Cannot Access Contents Discuss Encryption Technology
Encryption Tools
Talked Encryption Above Put Good Use
Many Ways Encrypt Data Elaborate Few Possible Tools Note: Quality/Security Encryption Tools May Differ Data Types May Require Different Encryption/Standards Cases: Specific Methods Compliant Ordinary Bloggers Most Tools Suffice Some Technical Knowledge Required
Basic Encryption: Password-protected ZIP Archive Not Foolproof 7-Zip Create Encrypted Files Native 7z Format (Filename Encryption) AES-256 Method Encryption Standard US Government Linux: GPG (GnuPG) Free Implementation OpenPGP Standard Encrypt Files/Email Several Frontend Tools
Encrypted Containers: Large Files Virtual Folders Store Many Files Casual Observer: Random File Documents.bin 603MB Mount (Open Special Program Read/Decrypt) Shown Folder/Separate Drive File Manager Interact Like Any Location
Friendly GUI Tools Create Encrypted Containers: TrueCrypt 和 VeraCrypt (Fork TrueCrypt Discontinued 2015) Last Info Pause: Assume Inherent Security Risk However Independent Audit Found No Significant Risks (For Now) Both Use Standards Including AES
Linux Tool: Vault Plasma-based Distros (KDE neon, Kubuntu) Integrated Desktop Create Encrypted Containers On-the-fly Backend CryFS AES-256 + Another Cipher
Documentation
Last Piece: Site Compliant Wrap Up Document Everything Including Privacy Policy Not Long/Fancy Short/Sweet Best Transparent What/Why Explain Changes Doubt Err on Side of Caution Give User Choice Rather Than Assume OK End: Transparency Actions, Anonymization User Data (If Possible), Secure Handling (Encryption)
Audits: Website Layout/Content Change Over Time Always Inevitably Do Every Now Then (Monthly/Quarterly/Cadence) Look Web Stack Changed? Document Them Affect Users? Reflect Privacy Policy/Relevant Tools/Services Users Interact
Conclusion
End 相信有用 Simple, Clear, Practical Cover Material 盡可能 Avoid Vague Language Real-life Relatable Examples Blogging Adventures GDPR Compliance NOT Trivial Requires Mental/Technical Effort Hours Work May Cost Money Direct Investment Post-compliance Traffic Changes But Nice Tidy Site Friendly/Fun Users
No Shortcuts Most Important: Education Ignorance Breeds Fear But Take Time Understand What You Doing - And Site Doing - Enjoy Work Outcome Careful Quick Promises Silver-bullet Solutions Don't Rush Take Time Figure Best Elegant Way Make Site Compliant Finally Feedback/Suggestions/Requests Topic Contact Me Update Guide Take Care, Children of the Internet
Resources
Order Appearance/Relevance (Most Linked Throughout):
GDPR Topics:
EU GDPR Information Portal
Wikipedia Article GDPR
Website Statistics/Analytics Tools:
AWStats
Google Analytics
Google Analytics Measurement Options Web Pages
Policy Requirements Google Analytics Advertising Features
Google Universal Analytics IP Anonymization
Google Analytics Opt-Out Browser Add-on
Cookie Control Tools:
Google Cookie Choices
Civic Cookie Control
Types Cookies Used Google
Google Analytics Cookie Usage Website
Google Universal Analytics Cookies User Identification
Google Adsense, CSE & Matched Content:
Google Adsense
Google CSE
Sharing Buttons:
ShareThis Opt-out Page
E-commerce:
PayPal Privacy Policy
Embedded Videos & Flash Player:
Wiki Page Local Shared Objects (Flash Cookies)
Adobe Flash Player Settings Manager
YouTube Embed Videos Playlists
WordPress:
WordPress Home Page
WordPress Version 4.9.6
The Ultimate Guide WordPress GDPR Compliance
Google Analytics for WordPress by MonsterInsights EU Compliance Plugin Add-on
Disqus Opt-out Policy
How to Disable WordPress Scripts Styles
WordPress Developers Tools Reference: wp_enqueue_script
WordPress Developers Tools Reference: wp_deregister_script
Encryption Tools:
7-Zip Homepage
The GNU Privacy Guard
OpenPGP Encryption Standard
Wiki Page Advanced Encryption Standard (AES)
TrueCrypt (GRC Page)
TrueCrypt Audit Report
VeraCrypt