ภาษา PHP นิยมมากในการพัฒนาเว็บ
แถมเป็นที่โปรดปรานของนักเจาะระบบยิ่งนัก
.
อันนี้จะเป็นไกด์ไลน์เขียน PHP
ให้ปลอดภัยไม่โดนแฮก
บทความของฝรั่งเขียนมานานแหละ
แต่ยังไม่ล้าสมัย
เพราะเทคนิคเดิมๆ
แม้กาลเวลาเปลี่ยน
แฮกเกอร์ก็ยังหากินได้อยู่เสมอ
.
อีกอย่างไม่ใช่แค่ PHP ที่มีช่องโหว่
เขียนภาษาอื่นบนเว็บก็มีช่องโหว่คล้ายๆ กัน
เช่น
- SQL injection แทบจะมีทุกภาษา เป็นปัญหาคลาสสิค
- Cross-Site Scripting (XSS) ต้นตอปัญหาก็มาจาก JavaScript
- Cross-Site Request Forgery (CSRF) ก็เป็นช่องโหว่ของโปรโตคอล HTTP
- Document Relationships ก็เป็นปัญหาจากภาษา HTTP
.
แต่บางปัญหาก็มาจาก PHP จริงๆ
เช่น upload ไฟล์แปลกปลอม
ขึ้นไปวางไว้ใน server แล้วประมวลผลได้เฉย
ซึ่งบางภาษาจะปลอดภัยและรัดกุมกว่า
.
เอาเป็นว่าศึกษา รู้ไว้ก็ไม่เสียหาย
ยิ่งรู้ก็ยิ่งมีประโยชน์โคดดดด
สามารถเพิ่มทักษะความรู้เรื่อง security
ตามลิงค์ข้างล่างนี้
https://paragonie.com/…/2018-guide-building-secure-php-soft…
.
✍เขียนโดย โปรแกรมเมอร์ไทย thai programmer
PHP language is very popular in web development.
It's a favorite of the drillers.
.
This one will be the guideline writing PHP.
Keep it safe. Not hacked.
Foreigner's article has been written for a while.
But it's not outdated.
Because of the same old technique.
Even when time changes.
Hackers are always looking for food.
.
Besides, not just PHP with loopholes.
Writing other languages on the web has similar vulnerabilities.
Such as.
- SQL injection. Almost every language is a classic problem.
- Cross-Site Scripting (QSS) Original. The problem is also from JavaScript.
- Cross-Site Request Forgery (CSRF) is a loophole of HTTP protocol.
- Document Relationships is also a problem from HTTP language.
.
But some problems really come from PHP
e.g. upload a foreign file
Go up, put it in server and process it.
Some languages are safer and tighter.
.
Let's just say, studying isn't damaged.
The more you know, the more useful.
Can enhance the knowledge of security skills
Follow the link below.
https://paragonie.com/blog/2017/12/2018-guide-building-secure-php-software
.
✍ Written by Thai programmer thai coderTranslated
「javascript every」的推薦目錄:
- 關於javascript every 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳解答
- 關於javascript every 在 Kewang 的資訊進化論 Facebook 的最讚貼文
- 關於javascript every 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳解答
- 關於javascript every 在 JavaScript 陣列處理方法[filter(), find(), forEach(), map(), every 的評價
- 關於javascript every 在 Determining If All Array Elements Pass a Test - JavaScript ... 的評價
- 關於javascript every 在 33 JavaScript concepts every developer should know. - GitHub 的評價
- 關於javascript every 在 For-each over an array in JavaScript - Stack Overflow 的評價
- 關於javascript every 在 JavaScript every() Array function | JS Buffer - YouTube 的評價
javascript every 在 Kewang 的資訊進化論 Facebook 的最讚貼文
小編好久沒發文了 Orz,來發個近日資訊業最大條新聞跟個人看法
---
GitHub 被微軟買走之後做了蠻多事情,像是前幾個月 npm 被 GitHub 買下來,但這其實也不意外,因為這兩年 GitHub 在 JavaScript 的支援度就愈來愈高,不止可以在網頁上面做 audit,也可以做 navigate,功能蠻齊全的。被買下來之後,之後可以期待在 GitHub 上面直接 deploy npm 模組了。
另外一個就是這次的 private repo 完全免費了,小編記得之前 private repo 免費好像有些限制,像是只限 5 人的樣子,但現在可說是完全不限,有富爸爸果然是不一樣!
---
再來說一下個人選擇,如果是可以給一般人看的內容,小編一定是用 GitHub,畢竟資訊人誰沒有一個 GitHub 帳號呢?然後個人接案因為不能公開原始碼,所以當然放在 GitLab (以前是 Bitbucket)。現在 Funliday 的 git repo 因為原始碼不能公開,當然也是放在 GitLab。
然後因為 Funliday server 是放在 Heroku 上面,Heroku 上面有個功能可以直接結合 GitHub 的 push 之後 deploy,但因為 Funliday 用的是 GitLab,所以沒辦法直接用這功能,只能繞個彎改用 dpl,把 GitLab 整合進 Heroku 裡。
但也因為用了 GitLab 之後,才知道它的功能比 GitHub 多太多,對一般公司所需要的權限控制,小編是覺得比 GitHub 完整。然後對於 CI/CD 的支援度也很強大,現在還支援 build docker image 的功能。
---
不過當 GitHub private 免費之後,對於沒有依賴 GitLab 權限控制或 container 功能的使用者,還蠻有可能移回 GitHub 的,畢竟能在同一個 hosting 操作當然比較方便。所以以後小編開 repo 的考量,可能就不再是 private 或 public 了,而是在於 deploy 的方便性,或是能不能 build 出 artifact 了。
• GitLab 自評與 GitHub 的差異:https://about.gitlab.com/blog/2020/04/14/github-free-for-teams
#github #gitlab
javascript every 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳解答
หนึ่งในปัญหาคลาสิก เวลาเขียนโปรแกรมที่ทุกคนต้องเจอเลย
ก็คือการบวกลบเลขทศนิยมในภาษาโปรแกรม ของบางภาษา นี้แหละ
เช่น JavaScript, Python, Perl, C#, C, C++, Java, PHP, Fortran
(และอื่นๆ อีกหลายภาษาที่ไม่ได้กล่าวถึง)
.
หลายครั้งที่มันอาจเพี้ยนได้ เช่น
👉 0.1+0.2 ไม่ได้เท่ากับ 0.3
แต่ได้เป็น 0.30000000000000004
.
👉 หรือ 0.1 บวกกัน 10 ครั้ง ก็ไม่ได้เป็น 1
แต่ได้เป็น 0.9999999999999999
.
คนเขียนโปรแกรมเจอแบบนี้เข้าไป
ก็เหมือนมวยโดนหมัดน๊อคมึนงงในดงโค้ด
:
:
แต่ใช่ว่ามันจะเพี้ยนทุกครั้ง ซะเมื่อไร เช่น
0.5+0.5 = 1 (ถูกต้องเป๊ะ)
0.2+0.3 = 0.5 (บังเอิญไม่เพี้ยน)
.
สำหรับ กรณี 0.2 กับ 0.3 มันถูกตัดเศษเหลือเป็น
0.2000000000000000111022302462515654042363166809082031250
กับ
0.2999999999999999888977697537484345957636833190917968750
พอบวกกันจึงได้ 0.5 พอดี แบบฟลุ๊คๆๆ ซึ่งไม่ควรทำได้
(ตรงสอบดูได้ 0.2+0.3 == 0.5 ได้ค่าออกมาเป็น true)
:
:
สาเหตุที่เป็นเช่นนี้
ก็เพราะว่าคอมพิวเตอร์มันรู้จักแต่ เลขฐาน2 อะนะ
ต่อให้เราเขียนโค้ดใช้เลขฐาน10 ก็ตาม
สุดท้ายเวลาโค้ดมันถูกรัน ก็จะกลายเป็นเลขฐาน 2 อยู่ดี
.
😨 แล้วก็เป็นความซวยที่จะมาเยือนคนเขียนโปรแกรม
เพราะเวลาแปลงเลขฐาน10 ไปเป็นเลขฐาน 2
บางกรณีมันแปลงแล้ว ดันได้ตัวเลขที่ไม่รู้จบเสียด้วยซิ
จึงทำให้การเก็บทศนิยมผิดเพี้ยนไปได้
.
สำหรับรูปแบบการจัดเก็บเลขทศนิยม ในหลายภาษา
เขาจะนิยมใช้มาตรฐาน IEEE-754 floating point
เช่น 0.1 จะถูกมองว่าคือ 1/10
.
เมื่อเก็บเป็นเลขทศนิยมฐานสอง
ตามมาตรฐาน IEEE-754 floating point จะได้เป็น
0.0001100110011001100110011001100110011001100110011...
เป็นทศนิยมไม่รู้จบในรูปเลขฐานสอง ....นี้คือสิ่งที่คอมมองเห็น
.
พอคอมแปลงกลับมาเป็นทศนิยม เพื่อให้มนุษย์โลกอ่านเข้าใจ
ในรูปฐาน 10 ก็จะได้เป็น
0.1000000000000000055511151231257827021181583404541015625
ทว่าคอมมันจะตัดให้เหลือแค่ 0.1 (คนจึงเห็นแค่นี้)
:
🤔 ซึ่งความเพื้ยนแบบนี้
แน่นอนทำให้เกิดบั๊กเวลาคำนวณตัวเลข
- ยิ่งงานต้องการคำตอบที่ละเอียดมาก เช่น งานธนาคาร ก็จะประสบปัญหา เป็นต้น
- หรือเวลานำไปใช้ในเงื่อนไขเปรียบเทียบพวก if, while ฯลฯ ก็อาจมีบั๊กเกิดขึ้นได้ เป็นต้น
.
😀 แต่ไม่ต้องห่วง ในหลายๆ ภาษาเขาจะมีวิธีแก้ปัญหานี้อยู่ครับ
ป้องกันการคำนวณตัวเลข ไม่ให้คลาดเคลื่อน เช่น
- ใน Java ก็จะมีคลาส BigDecimal เอาไว้บวกลบคูณหาร สำหรับเลขทศนิยมโดยเฉพาะ
- ใน Python ก็จะมีคลาสคล้ายๆ กัน เช่น Decimal
- ส่วนใน JavaScript อาจใช้ไลบรารี่ ซึ่งมีให้เลือกเยอะเช่น
https://github.com/MikeMcl/decimal.js/
https://github.com/MikeMcl/bignumber.js/
https://github.com/MikeMcl/big.js/
- ภาษาอื่นที่เหลือลองไปศึกษาเองดูนะครับ
.
.
เรื่องบวกลบคูณหาร เลขทศนิยม ถือเป็นเรื่องสำคัญที่ไม่ควรมองข้าม
โดยส่วนตัวก็เคยเจอความเผลอเรอตรงนี้
ในระดับโปรเจคระดับธนาคาร ก็เคยพลาดมาแล้ว
สุดท้ายต้องมาไล่นั่งแก้โค้ดหลายบรรทัด
เสียเวลานั่งไล่ test ใหม่อีกรอบอีก
.
หมายเหตุเห็นคอมเมนต์สงสัยว่า
PHP กับ C# รอดชะตากรรมเดียวกันไหม ?
ก็บอกว่าไม่รอดครับ
.
// ลองดูตัวอย่างโค้ด C#
Console.WriteLine( ((0.1+0.2) == 0.3)); // False
Console.WriteLine( ((0.1+0.2) == 0.30000000000000004)); // True
// ลองดูตัวอย่างโค้ด PHP
echo number_format(0.1+0.2 , 17);
.
++++++
เขียนโดย โปรแกรมเมอร์ไทย thai programmer
อ่านเรื่อง IEEE-754 floating point ได้ที่
https://th.wikipedia.org/wiki/จำนวนจุดลอยตัว
One of the programming time class issues that everyone needs to encounter.
It's a positive, negative, decimal number in the programming language of some languages.
เช่น JavaScript, Python, Perl, C#, C, C++, Java, PHP, Fortran
(And many other languages not mentioned)
.
So many times it can be crazy like
👉 0.1 + 0.2 is not equal to 0.3
But got to be 0.30000000000000004
.
👉 or 0.1 plus 10 times. It's not 1
But got to be 0.9999999999999999
.
The programmers found this.
It's like boxing. I got a punch. I'm confused in the code.
:
:
But it's not crazy every time.
0.5 0.5 0.5 0.5 1 (Exactly correct)
0.2 0.2 0.3 0.3 0.5 (accidentally not crazy)
.
For 0.2 and 0.3 cases, it was cut as debris.
0.2000000000000000111022302462515654042363166809082031250
With
0.2999999999999999888977697537484345957636833190917968750
Let's be positive. I got 0.5 fits. Fluke which I shouldn't do.
(I can see the exam. 0.2 + 0.3 == 0.5 I got the value to be true)
:
:
The cause is like this
It's because computer only knows the base number 2
Even if we write code, use base number 10
Finally, when the code is run, it will become the base number 2 anyway.
.
😨 and it's bad luck to visit the programmers.
Because time converts base number 10 to base number 2
In some cases, it's converted. I get an endless number.
So that the decimal collection is wrong.
.
For decimal numbers storage in multiple languages
He will be popular with IEEE-754 floating point standards.
For example, 0.1 will be seen as 1/10
.
When it's kept as a decimal number, binary digits.
According to IEEE standards-754 floating point will be.
0.0001100110011001100110011001100110011001100110011...
It's an endless decimal in the second base number.... This is what the computer sees.
.
When the computer comes back to a decimal, so that the world can read and understand.
In the base photo, 10 will be.
0.1000000000000000055511151231257827021181583404541015625
But the computer will cut it down to 0.1 (that's all I see)
:
🤔 This kind of friendship
Definitely make a time bug. Calculates numbers.
- The more jobs require a detailed answer, such as banking job, the problem is etc.
- or time to apply in comparison terms. If, while etc, there may be a buck happening. etc.
.
😀 But don't worry. In many languages, there will be a solution to this problem.
Prevent calculation of numbers from discrepancy, e.g.
- In Java, there will be a BigDecimal class. Plus, multiply, multiply for decimal numbers.
- In Python there are similar classes like Decimal
- Parts in JavaScript may use a lot of library to choose from, e.g.
https://github.com/MikeMcl/decimal.js/
https://github.com/MikeMcl/bignumber.js/
https://github.com/MikeMcl/big.js/
- Other languages. Let's study it yourself.
.
.
A positive, multiply, digging, decimal numbers are important things that shouldn't be overlooked.
Personally, I have experienced the accident.
Bank level project. I have already missed it.
Finally, I have to sit and solve many lines of code.
Waste of time. Sit to chase the new test again.
.
Note, see comments, wonder if
PHP and C #survive the same fate?
I told you that you won't survive.
.
// Check out the C code trailer #
Console.WriteLine( ((0.1+0.2) == 0.3)); // False
Console.WriteLine( ((0.1+0.2) == 0.30000000000000004)); // True
// Check out the PHP code trailer
echo number_format(0.1+0.2 , 17);
.
++++++
Written by Thai programmer thai coder
Read IEEE-754 floating point at
https://th.wikipedia.org/wiki/จำนวนจุดลอยตัวTranslated
javascript every 在 Determining If All Array Elements Pass a Test - JavaScript ... 的推薦與評價
Starting from ES5, JavaScript Array type provides a method every() that tests every element in an array. ... It is also much cleaner, isn't it? The following ... ... <看更多>
javascript every 在 33 JavaScript concepts every developer should know. - GitHub 的推薦與評價
33 JavaScript concepts every developer should know. - GitHub - leonardomso/33-js-concepts: 33 JavaScript concepts every developer should know. ... <看更多>
javascript every 在 JavaScript 陣列處理方法[filter(), find(), forEach(), map(), every 的推薦與評價
JavaScript 陣列處理方法[filter(), find(), forEach(), map(), every(), some(), reduce()]. 陣列處理技巧是JavaScript 中非常重要的一塊,現在框架 ... ... <看更多>
相關內容