diff --git a/Scott_Submissions/HW5.py b/Scott_Submissions/HW5.py new file mode 100644 index 0000000..4aae424 --- /dev/null +++ b/Scott_Submissions/HW5.py @@ -0,0 +1,91 @@ +# 5. What does this do? print("\007") Can you figure out why? + + # It is a ASCII Bell character. + # It generates a beep sound or a system alert depending on the platform and environment where the code is executed. + # It is often used to trigger attention or alert the user in certain situations or as a way to generate a simple sound signal in text-based interfaces. + + # BUT NOTHING HAPPENED ON MAC. + + + +# 6. What does this do? print("abcdefg\rhijklmnop") Can you figure out why? + + # '\r' is a carriage return character + # When the string is printed, the carriage return character '\r' causes the cursor to return to the beginning of the line. + # So when "hijklmnop" is printed, the cursor moves back to the start of the line, and the subsequent text "abcdefg" overwrites the initial characters. + + # The output is gonna be 'hijklmnop'. + + + +# 7. To shut down the HTTP server afterward, using Ctrl + C to interrupt the execution of the Python program. + +import http.server +import socketserver +from urllib.parse import urlparse, parse_qs + +class MyRequestHandler(http.server.SimpleHTTPRequestHandler): + def do_GET(self): + self.send_response(200) + self.send_header('Content-type', 'text/plain') + self.end_headers() + output_string = "abcdefg\rhijklmnop" + self.wfile.write(output_string.encode()) + +PORT = 8000 +Handler = MyRequestHandler +httpd = socketserver.TCPServer(("", PORT), Handler) +print(f"Serving on port {PORT}") + +httpd.serve_forever() + + # The HTTP server sends the response over the network to the client, which is typically a web browser. + # In this function, the server sends an HTTP response with a status code of 200 and a content type of "text/plain". + # The response body is set to the string "abcdefg\rhijklmnop" encoded as bytes. + # When the client receives this response, it interprets the \r character as a normal character and displays the entire string "abcdefg\rhijklmnop" as it is. + + # The '\r' character is a carriage return character, which is a control character used to return the cursor to the beginning of the current line. + # The behavior of the carriage return character '\r' can depend on the platform and how the output is handled. + + # For example: + # In Safari and Chrome, the "http://localhost:8000" shows: + # abcdefg + # hijklmnop + # In Macbook Terminal, the "curl http://localhost:8000" shows: + # hijklmnop% + + + +# 8. Think of a way someone might try to commit a crime or hide an embezzlement scheme using the answers to the above two questions. + + # The key is by manipulating or altering the output displayed on a web page versus what is actually happening in the system. + + # Case 1: + # Show the false financial transactions to earn the cut. + # Case 2: + # Delivey the heist planning details and hide any suspicious activity. + # Case 3: + # Overwrite the previously displayed information for the false testimony purpose. + + + +# 9. Think of how you would do input validation to prevent such a crime. Replace the code REPLACE ME here so the tests pass: + +def validate(input_str): + if '\r' in input_str or '\n' in input_str: + raise ValueError("Crime detected!") + +try: + validate("abcdefg") + print("✅ test1 pass!") +except ValueError: + print("❌ test1 fail!") + +try: + validate("abcdefg\rhijklmnop") + print("❌ test2 fail!") +except ValueError: + print("✅ test2 pass!") + + # Test 1 pass means there is no ValueError + # Test 2 pass means the ValueError has been detected \ No newline at end of file