<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>API Archives - Tomoshare</title>
	<atom:link href="https://blog.tomosia.com.vn/tag/api/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.tomosia.com.vn/tag/api/</link>
	<description>Kênh chia sẻ kiến thức Tomosia Việt Nam</description>
	<lastBuildDate>Fri, 03 Nov 2023 06:14:05 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.tomosia.com.vn/wp-content/uploads/2023/09/cropped-icon-32x32.png</url>
	<title>API Archives - Tomoshare</title>
	<link>https://blog.tomosia.com.vn/tag/api/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Introduction to GraphQL</title>
		<link>https://blog.tomosia.com.vn/introduction-to-graphql/</link>
					<comments>https://blog.tomosia.com.vn/introduction-to-graphql/#comments</comments>
		
		<dc:creator><![CDATA[admin_tomosia]]></dc:creator>
		<pubDate>Fri, 03 Nov 2023 06:14:04 +0000</pubDate>
				<category><![CDATA[Chưa phân loại]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[GrapQL]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1681</guid>

					<description><![CDATA[<p>Mở đầu GraphQL là ngôn ngữ trung gian kết nối giữa Client và Server. Nó không phải là&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/introduction-to-graphql/">Introduction to GraphQL</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p></p>



<h2 id="mo-dau" class="wp-block-heading">Mở đầu  </h2>



<p>GraphQL là ngôn ngữ trung gian kết nối giữa Client và Server. Nó không phải là RESTful API và chỉ có 1 endpoint duy nhất. Có thể tùy biến được dữ liệu trả về cho client. Được phát triển bởi Facebook</p>



<p>Ngày nay GraphQL được sử dụng bởi nhiều công ty khác nhau như GitHub, Twitter, Shopify, Yelp&#8230;</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="419" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/9575e73e-d831-4e91-a09d-a8ce8f765fd6-1024x419.png" alt="" class="wp-image-1683" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/9575e73e-d831-4e91-a09d-a8ce8f765fd6-1024x419.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/9575e73e-d831-4e91-a09d-a8ce8f765fd6-300x123.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/9575e73e-d831-4e91-a09d-a8ce8f765fd6-768x314.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/9575e73e-d831-4e91-a09d-a8ce8f765fd6-380x156.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/9575e73e-d831-4e91-a09d-a8ce8f765fd6-800x328.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/9575e73e-d831-4e91-a09d-a8ce8f765fd6-1160x475.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/9575e73e-d831-4e91-a09d-a8ce8f765fd6.png 1407w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="van-de-cua-restful-api" class="wp-block-heading">Vấn đề của RESTful API</h2>



<ul class="wp-block-list">
<li>Ta có một bài toán như sau: Có một danh sách post, mỗi post có một danh sách like, trong đó like gồm name và avatar, post thì gồm title, description, &#8230; Ta đã có sẵn API post, chỉ còn thiếu danh sách like trong post</li>



<li>Giải quyết bài toán: Trong API của post, ta thêm like vào</li>



<li>Vấn đề gặp phải: Nếu màn hình phía client chỉ cần thông tin của post như vậy dữ liệu like trả về ở đây sẽ dư thừa, gây ra ảnh hưởng lớn tới performance nếu dữ liệu nhiều</li>
</ul>



<h2 id="restful-voi-graphql" class="wp-block-heading">RESTful với GraphQL</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="716" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest-1024x716.png" alt="" class="wp-image-1682" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest-1024x716.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest-300x210.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest-768x537.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest-200x140.png 200w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest-380x266.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest-800x559.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest-1160x811.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/7d9a6f90-7080-11eb-87a2-9be5e90cdf74-GraphQLvsRest.png 1290w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>GraphQL so với REST. Đó là một cuộc tranh luận gay gắt trong thế giới API trong một thời gian. Và thẳng thắn mà nói, chúng chỉ là hai phương pháp khác nhau để giải quyết cùng một vấn đề: truy cập dữ liệu từ các dịch vụ web.</p>



<p>Mặc dù hai công nghệ có một số điểm tương đồng, nhưng sự khác biệt nhỏ có thể khiến bạn lựa chọn công nghệ này hơn công nghệ khác.</p>



<p>REST và GraphQL là hai cách tiếp cận thiết kế API thực hiện cùng một chức năng: truyền dữ liệu qua các giao thức internet như HTTP. Tuy nhiên,GraphQL là một ngôn ngữ truy vấn, trong khi REST là một mẫu kiến trúc.</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>GraphQL</strong></td><td><strong>REST</strong></td></tr><tr><td>Một ngôn ngữ truy vấn cung cấp hiệu quả và tính linh hoạt để giải quyết các vấn đề thường gặp khi tích hợp các API</td><td>Một phong cách kiến trúc phần lớn được xem như một tiêu chuẩn thông thường để thiết kế các API</td></tr><tr><td>Được triển khai qua HTTP bằng cách sử dụng một endpoint duy nhất.</td><td>Được triển khai trên một tập hợp các URL trong đó mỗi URL cung cấp một tài nguyên duy nhất</td></tr><tr><td>Sử dụng kiến trúc hướng đến client</td><td>Sử dụng kiến trúc hướng đến server</td></tr><tr><td>Thiếu cơ chế lưu vào bộ nhớ đệm tự động</td><td>Tự động sử dụng bộ nhớ đệm</td></tr><tr><td>Không có phiên bản API</td><td>Hỗ trợ nhiều phiên bản API</td></tr><tr><td>Chỉ đại diện data kiểu JSON</td><td>Hỗ trợ nhiều định dạng dữ liệu</td></tr><tr><td>Chỉ một công cụ duy nhất được sử dụng chủ yếu cho tài liệu: GraphQL</td><td>Nhiều tùy chọn cho tài liệu tự động, chẳng hạn như OpenAPI và API Blueprint</td></tr><tr><td></td><td></td></tr></tbody></table></figure>



<h2 id="mot-so-thuoc-tinh-cua-graphql-doi-voi-client" class="wp-block-heading">Một số thuộc tính của GraphQL (đối với client)</h2>



<ol class="wp-block-list">
<li><strong>Fields:</strong>&nbsp;hiểu đơn giản là các trường ta muốn trả về</li>
</ol>



<pre class="wp-block-code"><code>{
  hero { // đây là field
    name // đây là field
  }
}</code></pre>



<p>      2. <strong>Argument:</strong>&nbsp;là đối số truyền vào</p>



<pre class="wp-block-code"><code>{
  human(id: "1000") { // id: "1000" chính là đối số truyền vào
    name
    height
  }
}</code></pre>



<p>       3. <strong>Fragments:</strong>&nbsp;khi ta có quá nhiều câu truy vấn có cùng trường trả về, thì ta tạo fragment.               Nó giống như một tệp đóng gói, ta sẽ đem tệp này sử dụng ở nhiều nơi</p>



<pre class="wp-block-code"><code>  leftComparison: hero(episode: EMPIRE) {
    ...comparisonFields
  }
  rightComparison: hero(episode: JEDI) {
    ...comparisonFields
  }
}

fragment comparisonFields on Character {
  name
  appearsIn
  friends {
    name
  }
}</code></pre>



<p>       4. <strong>Directives:</strong>&nbsp;ta có 2 loại directives là&nbsp;<code>@include</code>&nbsp;và&nbsp;<code>@skip</code>, như tên gọi, tùy vào trường hợp mà ta sử lý thế nào cho hợp lý</p>



<pre class="wp-block-code"><code>query Hero($episode: Episode, $withFriends: Boolean!) {
  hero(episode: $episode) {
    name
    friends @include(if: $withFriends) {
      name
    }
    girlFriends @skip(if: $withFriends) {
      name
    }
  }
}</code></pre>



<p>      5. <strong>Query và Mutation</strong></p>



<ul class="wp-block-list">
<li>Query: được dùng khi chúng ta muốn hiển thị gì đấy, như show list hay show detail của post</li>



<li>Mutation: được dùng khi chúng ta muốn tạo mới, chỉnh sửa hay xóa record thì mutation sẽ được sử dụng</li>



<li>Có thể dùng ngược lại vì việc defined xem, tạo, xóa, sửa sẽ do phía Back-end xử lý</li>
</ul>



<h2 id="ket-luan" class="wp-block-heading">Kết luận</h2>



<ul class="wp-block-list">
<li>Bài viết này mình đã giới thiệu chung về GraphQL, với mong muốn mọi người hiểu được GraphQL là gì, Tại sao nó lại ra đời. Mình cũng muốn nhấn mạnh là GraphQL là&nbsp;<strong>một query language cho API</strong>, nó ra đời để khắc phục những thiếu sót và nhược điểm của REST.</li>



<li>Nguồn tham khảo:&nbsp;<a rel="noreferrer noopener" href="https://www.howtographql.com/basics/0-introduction/" target="_blank">https://www.howtographql.com/basics/0-introduction/</a></li>
</ul>
<p>The post <a href="https://blog.tomosia.com.vn/introduction-to-graphql/">Introduction to GraphQL</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/introduction-to-graphql/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Top 10 API Security Vulnerabilities in 2023 (Part II)</title>
		<link>https://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-ii/</link>
					<comments>https://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-ii/#comments</comments>
		
		<dc:creator><![CDATA[admin_tomosia]]></dc:creator>
		<pubDate>Sun, 08 Oct 2023 04:15:22 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[API]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=661</guid>

					<description><![CDATA[<p>Hí anh em! Tôi saiury92 đây ! Sau Part I, anh em thấy như thế nào? Có thấy&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-ii/">Top 10 API Security Vulnerabilities in 2023 (Part II)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Hí anh em! Tôi <a rel="noreferrer noopener" href="https://saiury92.github.io" data-type="link" data-id="https://saiury92.github.io" target="_blank">saiury92 </a>đây ! Sau <a href="http://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-i/" data-type="link" data-id="http://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-i/">Part I</a>, anh em thấy như thế nào? Có thấy nhột trong lòng sau khi nghĩ về những dự án trước đây đã release cho khách hàng mà vẫn tồn đọng các lỗ hổng bảo  mật không ? Trong bài viết ngày hôm nay anh em còn thấy nhột hơn nữa vì 3 lỗ hổng tiếp theo đây, anh em hay mắc phải và thường tặc lưỡi bỏ qua khi code. </p>



<h4 id="4-unlimited-resource-consumption" class="wp-block-heading"><strong>4. <strong>Unlimited Resource Consumption</strong></strong></h4>



<p>API không được bảo vệ, dễ bị tổn thương trước số lượng request hoặc payload sizes quá lớn. Những kẻ tấn công có thể sử dụng điều này gây Denial of Service (DoS) cho hệ thống, hoặc brute force attacks để cố gắng authentication.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="410" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-38-1024x410.png" alt="" class="wp-image-717" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-38-1024x410.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-38-300x120.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-38-768x307.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-38-380x152.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-38-800x320.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-38.png 1079w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Lỗ hổng <strong>Unlimited Resource Consumption</strong> xảy ra khi API không có cơ chế hạn chế số lượng request tới server. Ví dụ chắc năng login bằng số điện thoại và mã OTP được gửi về số điện thoại, sau đó quá trình xác thực được thực hiện thông qua API <mark style="background-color:#e9ecef" class="has-inline-color">POST /api/users/otp_verify</mark>. Kẻ tấn công sẽ dùng brute force attacks để tấn công API, random OTP từ 0000 -&gt; 9999 để kiểm thử  tìm ra OTP chính xác. Ngoài ra kẻ tấn công có thể upload file với kích thước quá lớn hoặc queries phức tạp khiến API gặp phải tình trạng tắc nghẽn và drop requests.</p>



<p>Cách phòng chống:</p>



<ul class="wp-block-list">
<li>Áp dụng chính sách rate-limiting cho tất cả API endpoints. Đặt biệt với những endpoints liên quan đến authentication là mục tiêu hàng đầu của những kẻ tấn công.</li>



<li>Giới hạn số lượng requests có thể được thực hiện từ một địa chỉ IP hoặc người dùng trong một khoảng thời gian nhất định.</li>



<li>Sử dụng keys, fingerprints, recaptcha, .. để giới hạn tốc độ requests.</li>



<li>Giới hạn payload size và độ phức tạp của query.</li>



<li>Giới hạn số lượng dữ liệu mà một truy vấn có thể truy xuất bằng cách áp dụng các giới hạn về pagination size, or page counts.</li>



<li>Tận dụng các biện pháp bảo vệ DDoS từ cloud provider (AWS WAF, API Gateway, &#8230;).</li>
</ul>



<h4 id="5-broken-function-level-authorization" class="wp-block-heading"><strong>5. Broken function level authorization</strong></h4>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="700" height="394" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-39.png" alt="" class="wp-image-745" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-39.png 700w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-39-300x169.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-39-380x214.png 380w" sizes="auto, (max-width: 700px) 100vw, 700px" /></figure>



<p>Ở Part I, chúng ta có <strong>broken object level authorization</strong> là lỗ hổng liên quan đến phân quyền truy cập đến các đối tượng, user1 có thể truy xuất dữ liệu của user2 thông qua thay đổi ID. Còn lỗ hổng <strong>broken function level authorization</strong> liên quan đến phân quyền các chức năng của hệ thống. Kẻ tấn công phán đoán các API ẩn với những đặc quyền cao hơn và thực thi chúng. Ví dụ kẻ tấn công có thể truy cập đến API <mark style="background-color:#e9ecef" class="has-inline-color">/api/users/my_financial_info</mark>, bọn chúng phán đoán và thử thay đổi <mark style="background-color:#e9ecef" class="has-inline-color">users -&gt; admin</mark> truy cập vào API <mark style="background-color:#e9ecef" class="has-inline-color">/api/admin/all_info</mark>, sự phân quyền yếu kém có thể dẫn đến việc lộ hết các thông tin nhạy cảm của tất cả users.</p>



<p>Cách phòng chống:</p>



<ul class="wp-block-list">
<li>Chia các API endpoints thành các function scope, phần quyền chặt chẽ theo từng scope.</li>



<li>Kiểm soát truy cập các function trên server không bao giờ chỉ xử lý phân quyền ở phía client.</li>



<li>Mặc định để <em><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">deny all</mark></em> access các function. Chỉ cấp quyền với đối tượng cụ thể.</li>
</ul>



<h4 id="6-unrestricted-access-to-sensitive-business-flows" class="wp-block-heading"><strong>6. Unrestricted Access to Sensitive Business Flows</strong></h4>



<p>Khi các API thực hiện một business flow (quy trình đặt vé, mua sản phẩm, ..). Kẻ tấn công nắm được các business này, lợi dụng các API bằng các phương pháp tự động để đạt được mục đích xấu, chẳng hạn như lấy cắp dữ liệu hoặc thao túng dữ liệu thị trường hoặc giá cả.</p>



<p>Một business flow thường gặp và kịch bản tấn công:</p>



<ul class="wp-block-list">
<li>Purchasing a product flow &#8211; Kẻ tấn công sử dụng tính năng tự động để mua tất cả hàng tồn kho của một mặt hàng có nhu cầu cao cùng một lúc và bán lại với giá cao hơn.</li>



<li>Creating a comment/post flow &#8211; Kẻ tấn công lợi dụng tính năng bình luận hoặc post bài viết để tự động spam hệ thống.</li>



<li>Making a reservation &#8211; Kẻ tấn công có thể đặt tất cả các chỗ , ngăn chặn người dùng khác sử dụng hệ thống. </li>
</ul>



<p>Cách phòng chống:</p>



<ul class="wp-block-list">
<li>Cần nắm vững các business flow, hiểu các business flow có thể dễ bị lạm dụng và thêm các lớp bảo vệ bổ sung cho các quy trình này, authentication là required.</li>



<li>Áp dụng rate-limiting để hạn chế số lượng và tốc độ truy cập.</li>



<li>Monitor số lượng truy cập API để phát hiện nguồn truy cập đáng ngờ.</li>



<li>Identify non-human: Xác định xem đó có phải người dùng thao tác không chẳng hạn như kiểm tra giao dịch nhanh bất thường, thiết lập Captcha, human detection,..</li>
</ul>



<p>Trong ba lỗ hổng trên, ý kiến cá nhân mình đánh giá <strong>Unrestricted Access to Sensitive Business Flows</strong> là anh em xác suất dính phải cao nhất, còn các anh em khác thấy như thế nào? Tự hỏi admin blog mình có cơ chế nào tránh việc comment spam không ta ?&#8230;&#8230;.</p>



<p><strong>Reference</strong></p>



<p><a href="https://apisecurity.io/owasp-api-security-top-10/">https://apisecurity.io/owasp-api-security-top-10/</a></p>
<p>The post <a href="https://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-ii/">Top 10 API Security Vulnerabilities in 2023 (Part II)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-ii/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Top 10 API Security Vulnerabilities in 2023 (Part I)</title>
		<link>https://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-i/</link>
					<comments>https://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-i/#comments</comments>
		
		<dc:creator><![CDATA[admin_tomosia]]></dc:creator>
		<pubDate>Sun, 08 Oct 2023 03:53:21 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[API]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=480</guid>

					<description><![CDATA[<p>Hí anh em! Tôi saiury92 đây ! Phận làm dev mười hai bến nước , trong nhờ đục&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-i/">Top 10 API Security Vulnerabilities in 2023 (Part I)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Hí anh em! Tôi <a rel="noreferrer noopener" href="https://saiury92.github.io" data-type="link" data-id="https://saiury92.github.io" target="_blank">saiury92 </a>đây ! Phận làm dev mười hai bến nước , trong nhờ đục chịu. Code thì phải làm bảo deadline, đúng estimate, nhưng lại phải không có bug, sếp thì lúc nào cũng dí ! Qua ông sếp mới sang vỗ vai bảo &#8220;<em>chú code tốt, bug thì cũng ít đấy nhưng security của dự án thì thế nào em ?</em>&#8221; Hả security là cái quái gì ? Mình code đúng theo yêu cầu spec của khách hàng là được rồi mà ! Thế là tôi lại phải đi hỏi ChatGPT, Bard,&#8230; thì mới ớ người ra, vấn đề bảo mật nó còn quan trọng hơn bất kỳ cái gì khác ! Dự án có code ngon đến đâu dính vào lỗ hổng bảo mật là bọn hacker nó vào phá nát như tương !<br><br>Chính thế !! Hôm nay tôi đưa đến cho các đồng dâm <strong>10 vấn đề của API security thường gặp</strong> để anh em có thể vỗ ngực trước sếp &#8220;security à ! Cái này em được học từ trong bụng mẹ !&#8221;</p>



<h4 id="1-broken-object-level-authorization" class="wp-block-heading"><strong>1. Broken object level authorization</strong></h4>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="700" height="394" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-35.png" alt="" class="wp-image-665" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-35.png 700w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-35-300x169.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-35-380x214.png 380w" sizes="auto, (max-width: 700px) 100vw, 700px" /></figure>



<p>Sở dĩ <strong>Broken object level authorization</strong> nằm top 1 là vì hacker không cần sử dụng phương pháp tấn công gì cao siêu, chỉ cần thay thế ID tài nguyên của họ bằng ID tài nguyên thuộc về người dùng khác. Ví dụ như, kẻ tấn công biết được API có dạng <mark style="background-color:#e9ecef" class="has-inline-color has-black-color">/api/shopID/financial_info</mark>, chúng thử nghiệm thay thế từng <mark style="background-color:#e9ecef" class="has-inline-color has-black-color">shopID</mark>, nếu API không phân quyền user với từng shop thì hacker có thể xem được thông tin của tất cả các shop. Vấn đề có thể trầm trọng hơn khi ID là tuyến tính có thể liệt kê ra được (ID: 1,2,3,..).</p>



<p>Cách phòng chống:</p>



<ul class="wp-block-list">
<li>Thực hiện kiểm tra ủy quyền chặt chẽ với từng API và nên xây dựng hệ thống phân quyền có cấp bậc với từng tài nguyên. Chỉ những user có quyền xem <mark style="background-color:#e9ecef" class="has-inline-color has-black-color">financial_info</mark> của <mark style="background-color:#e9ecef" class="has-inline-color has-black-color">shop1ID</mark> mới có quyền call API <mark style="background-color:#e9ecef" class="has-inline-color has-black-color">/api/shop1ID/financial_info</mark>.</li>



<li>Không nên dựa vào ID phía client gửi, sử dụng ID được lưu trữ trong session.  Thay vì sử dụng <mark style="background-color:#e9ecef" class="has-inline-color has-black-color">/api/shopID/financial_info</mark>, ta có thể sử dụng <mark style="background-color:#e9ecef" class="has-inline-color has-black-color">/api/financial_info</mark> lấy thông tin shop dựa vào <strong>current_user</strong>.</li>



<li>Sử dụng random IDs để kẻ tấn công không thể đoán được (UUIDs &#8211; <mark style="background-color:#e9ecef" class="has-inline-color has-black-color">/api/cc20c3ec-1fcc-4912-a0bc-b361d1180b63/financial_info</mark>).</li>



<li>Triển khai test case đầy đủ để ngăn ngừa lỗ hổng này.</li>
</ul>



<h4 id="2-broken-authentication" class="wp-block-heading"><strong>2. Broken authentication</strong></h4>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="700" height="394" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-36.png" alt="" class="wp-image-667" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-36.png 700w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-36-300x169.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-36-380x214.png 380w" sizes="auto, (max-width: 700px) 100vw, 700px" /></figure>



<p>Broken object level authorization là lỗ hổng liên quan đến phân quyền, còn<strong> broken authentication </strong>là xác thực. Xác thực API được triển khai kém cho phép hacker giả định danh tính của người dùng khác hoặc truy cập tài nguyên mà không cần bất kỳ xác thực nào.</p>



<p>Nguyên nhân dẫn đến broken authentication:</p>



<ul class="wp-block-list">
<li>Những internal API không có authentication. Một số API nằm trong private network chúng ta mặc định đã an toàn mà bỏ qua việc xác thực.</li>



<li>Có cơ chế xác thực nhưng cơ thể xác thực đơn giản, API key yếu, dễ đoán không rotate định kỳ.</li>



<li>Mật khẩu yếu, plain text, hàm băm kém, mật khẩu dùng chung hoặc mật khẩu mặc định. Một số hệ thống tự động tạo password mặc định nhưng password dễ đoán mà không có chức năng reset password lần login đầu tiên.</li>



<li>Authentication dễ bị brute force attacks. Brute force attacks là kiểu tấn công mà hacker sẽ cố gắng đoán mật khẩu hoặc các thông tin xác thực khác bằng cách thử tất cả các kết hợp ký tự có thể.</li>



<li>Thông tin credentials and keys bị lộ trong URLs.</li>



<li>Cơ chế xác thực yếu, JWT token&nbsp;chỉ decode mà không verify signature (chữ ký).</li>



<li>Sử dụng token vĩnh viễn, không hết hạn.</li>
</ul>



<p>Cách phòng chống:</p>



<ul class="wp-block-list">
<li>Kiểm tra tất cả các API đã xác thực chưa, nếu có thì các cách có thể xác thực.</li>



<li>API cho password reset and one-time links để authenticate cần được bảo mật, có thể đính kèm với one-time verification code.</li>



<li>Sử dụng những phương pháp tiêu chuẩn có sẵn để generate token (JWT), lưu trữ password và multi-factor authentication (MFA).</li>



<li>Sử dụng rate-limiting cho việc authentication (quy định hạn mức request authenticate thất bại), thực hiện các chính sách lockout khi có nghi ngờ, kiểm tra password yếu của người dùng.</li>
</ul>



<h4 id="3-broken-object-property-level-authorization" class="wp-block-heading"><strong>3. <strong>Broken Object Property Level Authorization</strong></strong></h4>



<p>API endpoints có thể bị tấn công dựa vào data của chúng (request data, response data): response data tiết lộ nhiều thông tin hơn mục đích business (excessive information exposure), chấp nhận và xử lý nhiều request data hơn mức cần thiết (mass assignment).</p>



<p>Nhiều API trả về toàn bộ dữ liệu thuộc tính của object (<code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">user-&gt;toJson()</mark></code>), việc lọc dữ liệu cần thiết để hiển thị được hiện bên phía client. Kể tấn công có thể lấy các dữ liệu nhạy cảm, phân tích để biết được các fields của object của database để tấn công mass assignment.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="767" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-34-1024x767.png" alt="" class="wp-image-623" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-34-1024x767.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-34-300x225.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-34-768x575.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-34-380x285.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-34-800x599.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-34-1160x869.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-34.png 1400w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Mass assignment</strong> ở đây là cách kẻ tấn công bổ sung thêm các fields nhạy cảm vào request payload gửi lên API. API không lọc dữ liệu đầu vào, permit data, bind toàn bộ params data sang object và lưu object đó vào database. Kẻ tấn công có thể chỉnh sửa thông tin nhạy cảm, thay đổi role người dùng,&#8230;</p>



<p>Cách phòng chống:</p>



<ul class="wp-block-list">
<li>Không trả về toàn bộ dữ liệu và dữ liệu phải được lọc ở server trước khi trả về cho client. Chỉ tiết lộ dữ liệu cần thiết để hiển thị phía client.</li>



<li>Xác định các dữ liệu nhạy cảm và tránh tiết lộ các thông tin này: Personally Identifiable Information (PII &#8211; email, phone, passport, Social Security number), Payment Card Industry (PCI).</li>



<li>Không tự động assign params data tới objects. Cần permit params, payload data, lọc và lấy dữ liệu cần thiết.</li>



<li>Sử dụng readOnly với những thuộc tính có thể truy xuất qua API mà không bao giờ được sửa đổi.</li>
</ul>



<p>Trên đây là top 3 lỗ hổng bảo mật hàng đầu ! Thui buồn ngủ rùi hẹn các đồng dâm ở <a href="http://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-ii/" data-type="link" data-id="http://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-ii/">part II</a> nha !</p>



<p><strong>Reference</strong></p>



<p><a href="https://apisecurity.io/owasp-api-security-top-10/">https://apisecurity.io/owasp-api-security-top-10/</a></p>
<p>The post <a href="https://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-i/">Top 10 API Security Vulnerabilities in 2023 (Part I)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/top-10-api-security-vulnerabilities-in-2023-part-i/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>
