Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In
Continue with Google
Continue with Facebook
or use


Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here
Continue with Google
Continue with Facebook
or use


Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.


Have an account? Sign In Now

Sorry, you do not have a permission to ask a question, You must login to ask question.

Continue with Google
Continue with Facebook
or use


Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

Stack Ask

Stack Ask Logo Stack Ask Logo

Stack Ask Navigation

  • Home
  • About Us
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • About Us
  • Contact Us
Home/ Questions/Q 6804
Next
In Process
Quốc Hưng Hoàng
  • 1
Quốc Hưng HoàngBeginner
Asked: August 12, 20222022-08-12T14:47:19+00:00 2022-08-12T14:47:19+00:00In: Python

Lưu trữ text with formatting trong database

  • 1

Chào anh Dũng,

Hiện tại em đang làm 1 project mà ở đó người dùng có thể soạn văn bản kèm format (in đậm, in nghiêng, hyperlink, hình ảnh v.v…) để gửi mail.

Trong project có tính năng là người dùng có thể tuỳ chỉnh signature của họ (tương tự signature của gmail, nằm cuối cùng trong 1 nội dung mail).

Hiện em ko chắc mình sẽ lưu signature này như thế nào. Theo suy nghĩ của em là phía frontend sẽ dùng 1 markup language (như markdown) để convert các định dạng (in nghiêng, in đậm, hyperlink) để trở thành 1 chuỗi string thuần.

Vì vậy em có hỏi cấp trên (TA) là system sẽ dùng markup language gì để khi nhận đc input từ frontend, backend sẽ biết đc đó là định dạng gì (thay vì ghi nhận là các kí tự đặc biệt).
Phía backend cũng cần biết vì có những tính năng backend sẽ trực tiếp gửi mail đến người dùng ạ (ví dụ reset password)

Sau khi hỏi thì TA có bảo em là cứ lưu nguyên HTML code mà k cần convert gì hết. Em nghe thấy lấn cấn nhưng cũng k có lí do gì để phản biện lại. Nên trước mắt e vẫn làm theo yêu cầu đấy.
Xin anh Dũng cho em lời giải ạ.

mailmail template
  • 6 6 Answers
  • 133 Views
  • 0 Followers
  • 0
Answer
Share
  • Facebook
  • Report

6 Answers

  • Voted
  • Oldest
  • Recent
  1. tvd12 Enlightened
    2022-08-12T15:15:05+00:00Added an answer on August 12, 2022 at 3:15 pm
    This answer was edited.

    Qua rất nhiều trình gửi mail và các dự án gửi mail thì anh thấy backend không cần phải biết nội dung mail đó là gì em ạ. Chỉ đơn giản là client sẽ submit HTML thuần lên server, server sẽ lưu lại nội dung hoặc gửi ngay tuỳ theo logic.

    Tuy nhiên đa phần các dự án anh làm là sẽ có 1 bảng lưu mail template (cũng ở dạng html) và sau đó client gửi thì chỉ cần bổ sung các tham số, server sẽ thay thế các tham số tương ứng rồi gửi mail thôi.

    Nói tóm lại, comment cấp trên của em là hoàn toàn hợp lý em ạ, em sẽ không cần phải convert bất kỳ cái gì cả, cứu lưu hoặc gửi luôn html mà client submit lên server là được.

    Ví dụ đây là copyright của stackask này khi gửi mail:

    &copy; 2021 Stack Ask. All Rights Reserved<br>Powered by <a href="https://youngmonkeys.org" target="_blank">youngmonkeys.org</a>.
    

    Em có thể thấy nó là html thuần thôi.

    • 2
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report
    • Hihi Teacher
      2022-08-14T12:26:23+00:00Replied to answer on August 14, 2022 at 12:26 pm

      Cho em hỏi thêm là ví dụ là Backend sẽ auto chạy 1 cron job vào 1 thời điểm nhất định trong ngày => gửi mail và ko cần ng soạn mail lúc gửi thì dùng các view engine sẽ dễ sửa đổi, tùy chỉnh các template hơn là dùng html thuần (dạng text) đúng ko a? ( cái này có thể gọi là 1 service chuyên để gửi mail a ạ )

      • 0
      • Share
        Share
        • Share on Facebook
        • Share on Twitter
        • Share on LinkedIn
        • Share on WhatsApp
        • Report
      • dungtv Explainer
        2022-08-14T12:31:53+00:00Replied to answer on August 14, 2022 at 12:31 pm

        Anh thấy là như nhau em ạ, nó cũng chỉ là mấy cái biến kiểu ${username} hay phức tạp hơn tí là table thì cũng có vẻ không phức tạp lắm, tuy nhiên nếu dùng các engine thì có vẻ hỗ trợ tốt hơn đó em ạ, nó có cả vòng lặp, if else nên em quen cái gì thì dùng cái đó em ạ, đừng lăn tăn quá

        • 0
        • Share
          Share
          • Share on Facebook
          • Share on Twitter
          • Share on LinkedIn
          • Share on WhatsApp
          • Report
  2. Quốc Hưng Hoàng Beginner
    2022-11-14T09:09:18+00:00Added an answer on November 14, 2022 at 9:09 am

    chào anh Dũng,

    Em có thắc mắc rằng nếu để client submit HTML  thuần như:
    “<script>alert(“!!!”)</script>”

    thì server sẽ vi phạm XSS attack.

    còn nếu server escape các kí tự đặc biệt (<, >, …) thì khi server gửi email (không thông qua client) thì phía bên email client (như Gmail) sẽ hiển thị đoạn HTML đó dưới dạng string.

    Hiện tại hướng giải quyết của em: dùng regex để detect <script></script> pattern. Nếu ko tìm được -> ko escape các kí tự đặc biệt
    Nếu tìm ra, escape chúng.

    Rất mong phận đc sự hướng dẫn của a

    • 0
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report
    • Thế Nguyễn Beginner
      2022-11-14T10:16:49+00:00Replied to answer on November 14, 2022 at 10:16 am

      Nếu dùng spring thì có HtmlUtils. Còn không của apache lang cũng có stringescapeutils. Đỡ phải viết lại bạn nhé.

      • 0
      • Share
        Share
        • Share on Facebook
        • Share on Twitter
        • Share on LinkedIn
        • Share on WhatsApp
        • Report
  3. monkey Enlightened
    2022-11-14T09:49:30+00:00Added an answer on November 14, 2022 at 9:49 am

    Có 2 trường hợp:

    1. Nếu em cho phép client input cả html, thì có vẻ như cách “Hiện tại hướng giải quyết của em: dùng regex để detect <script></script>
    pattern. Nếu ko tìm được -> ko escape các kí tự đặc biệt, nếu tìm ra, escape chúng” là phù hợp.

    2. Nếu em không cho phép client input html, thì em có thể escape toàn bộ cho đơn giản em ạ.

    • 0
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

You must login to add an answer.

Continue with Google
Continue with Facebook
or use


Forgot Password?

Need An Account, Sign Up Here

Sidebar

Ask A Question

Stats

  • Questions 823
  • Answers 1k
  • Best Answers 80
  • Users 334
  • Popular
  • Answers
  • monkey

    [Deep Learning] Làm thế nào để xác định được cái ...

    • 16 Answers
  • Thành Vương

    Bug sai đường dẫn khi config ckeditor lên live

    • 14 Answers
  • Tú Trần Anh

    [Ezyfox Server] Unity game client không gửi được command khi ...

    • 12 Answers
  • tvd12
    tvd12 added an answer Anh thấy chỉ cần lúc tạo bảng em cứ khai… January 20, 2023 at 4:28 pm
  • monkey
    monkey added an answer 1. Anh chưa hiểu là cơ sở dữ liệu của… January 16, 2023 at 9:55 am
  • monkey
    monkey added an answer Em có thể tham khảo 2 lớp này: https://github.com/youngmonkeys/ezymq/tree/master/ezymq-kafka/src/main/java/com/tvd12/ezymq/kafka/serialization. Ở… January 16, 2023 at 6:34 am

Related Questions

  • Quốc Hưng Hoàng

    Làm thế nào để unsubscribe email

    • 5 Answers
  • Quốc Hưng Hoàng

    Cách xử lí exception trả về từ 3rd-party library

    • 3 Answers
  • Nguyễn Thái Sơn

    có nên định hướng học thêm machine learning

    • 1 Answer

Top Members

tvd12

tvd12

  • 76 Questions
  • 1k Points
Enlightened
monkey

monkey

  • 122 Questions
  • 1k Points
Enlightened
Nguyễn Thái Sơn

Nguyễn Thái Sơn

  • 205 Questions
  • 307 Points
Enlightened

Trending Tags

#formatdate .net .net core .net oop abstract class access app access token ai analytics android ansible anti-flooding apache poi api app architecture artificial intelligence assembly async asyncawait atomicboolean authentication backend backend nestjs background bash script batch bean big project binding bitcoin blockchain blog boot-nodes branch british btree bucket4j buffered build bundle c# c# .net cache caching callback career career path cast centos chat cloud cloud reliability commit communication company computer science concurrent config-css connection pool content-disposition contract convert date to number cookie cors cosmos cosmos-sdk crawl data cron css database database migration datasource datastructure deadlock decentralized exchange deep learning deploy contract design-pattern design patterns devops dex di distraction programing dns docker download draw.io du học duration dữ liệu lớn eclip editor elasticsearch email employee english erc20 erc721 estimation eth ethereum ethereum login excel exception exception handle exception handler executor export compliance extensions exyfox ezyfox ezyfox-boot ezyfox-server ezyfoxserver ezyhttp ezymq-kafka ezyredis facebook fe filter floating point flutter format json freetank french front-end frontend fullstack fulltextsearch future gallery game game-box game-room game-server gateway get get file zip git glide go golang google gorilla graduation thesis graphql grapql grpc guide h2 database handy terminal hazelcast hibernate hibernateconfig html http https hyperloglog image index indexing integration-test intellij interface interview io ioc ipfs isolate issue it java java core javacore javascript java spring javaw java web jenkins jetbrains job join jotform jpa js json json file jsonproperty json to object jsp jsp & servlet junit-test jvm jwt kafka keep promise kerberos keycloak kotlin language languague library list load-balancing load balancer lock log log4j log4j-core login lưu trữ machine learning macos mail mail template main maria db math maven merge message queue messaging metamask microservice microservices migration mobile model mongo monitoring mq msgpack multi-threading multiple tenant multithread multithreading mysql n naming naming convention nan netcore netty networking nft nft game nginx nio node.js nodejs non-blocking io null oop opensource optimize orm otp message paginaiton pagination pancakeswap panic partition pdf pgpool phỏng vấn plugin pointer postgresql pre private_key procedure profile programming project management promise properties push-noti push message android push notification python python unicode qrcode question queue rabbitmq reactive reactjs reactjs download readmoretextview recyclerview redis refactor refresh token regex replica repository request resilence4j resource rest resttemplate roadmap ropssten ropsten round robin rust rxjava s3 schedule scheduled scheduled spring boot search security send email send mail server servlet session shift jis singleton sjis slack smart contract soap socket socket server soft delete solution sosanh spring spring-boot-test spring-jpa spring aop spring boot springboot spring data jpa spring redis spring security springsecurity springwebflux mysql spring websocket spring websocket cors sql sql server sse ssl email stackask storage stream stream api stress test structure trong spring boot study synchronize synchronized system environment variables test thread threadjava threadpool thread pool thymeleaf tomcat totp tracking location transaction transfer transfer git udp uniswap unit test unity upload upload file utf-8 file validate validate date vector view volatile vue vue cli watermark web web3 web3 client webassembly webflux webpack websocket windows 11 winforms work zip file zookeeper

Footer

Stack Ask

Stack Ask is where Developers Ask & Answers. It will help you resolve any questions and connect you with other people.

About Us

  • Meet The Team
  • About Us
  • Contact Us

Legal Stuff

  • Terms of Service
  • Privacy Policy
  • Cookie Policy

Help

Follow

© 2021 Stack Ask. All Rights Reserved
Powered by youngmonkeys.org