WPF 는 아래의 구성에서 빨간색 표시된 다이어그램이다. milcore 는 DirectX를 위한 코드이어서 native이고 나머지는 managed 코드이다. System.Threading.DispatcherObject DispatcherObject는 WPF의 대부분의 클래스의 부모클래스로 정의된다. 이는 여러개의 쓰레드간의 데이터를 주고받을 수 있도록 CLR 객체를 생성하여 STA 동작이 되도록 한다. Dispatcher를 통해서 메시지를 큐에 쌓아서 순차적으로 동작을 하면서 단일 쓰레드에서 UI를 제어 할 수 있도록 한다. 관련된 것이 cross thread exception, deadlock, race condition과 같은 문제를 방지하기 위한 것이다. System.Windows.Dependenc..
WPF Style을 이용하여 여러개의 TargetType 에 대해서 각각의 ControlTemplate를 지정하는 방법이다. Style을 Control 에 지정하였을 때, Resource는 Target이 되는 Type별로 ControlTemplate을 정의한다. Style의 Template property 에는 style이 적용되는 control 의 TargetType 속성을 얻어와 Style.Resource 에서 매치되는 TargetType의 ControlTemplate를 적용할 수 있도록 한다. 이를 위해서 RelativeSource 의 Self 객체의 Path=TargetType 으로 값을 얻어와서 ControlTemplate의 TargetType에 binding 한다. 아래는 Button 에 St..
Wpf toast message 활용하기 using Windows.Data.Xml.Dom; using Windows.UI.Notifications; public void ShowCustomizedToastNotification(string title, string message, string imageFilePath, string audioFilePath, int durationInSeconds) { // Set up the XML content for the toast notification var xml = $@" {title} {message} This is a long message that should wrap to multiple lines in the notification. param1=v..
개념 Templates: Templates in WPF are used to define the structure and appearance of controls. They provide a way to customize the look and feel of a control without changing its functionality. There are two main types of templates in WPF: a. ControlTemplate: A ControlTemplate allows you to redefine the entire visual appearance of a control, such as a Button, ListBox, or ComboBox. It is a blueprint..
일반 사용자를 생성하고 특정 권한만 부여하기 CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; GRANT SELECT, INSERT, UPDATE ON mydatabase.* TO 'newuser'@'localhost'; Admin 계정을 생성하여 모든 권한을 부여하기 CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON mydatabase.* TO 'admin'@'localhost';
1. 개요 Server 로 쿼리 요청을 통해서 Database 의 접근을 하는 경우 Sql Injection 이 발생할 수 있는 위험성이 있다. 이를 해결하는 방법으로 Prepared Statement를 구성하고 입력받은 value 값에 injection 이 들어가서 sql 쿼리의 명령에서 원치 않는 동작이 발생되는 것을 방지한다. 2. Python 구현 Flask 서버를 사용하여 PD를 구현하였다. 우선 get 쿼리를 통해 id와 pw 를 얻고 이를 PD를 적용하여 sql query 를 수행하도록한다. #Prepared Statement test @app.route('/psapi', methods=['GET']) def handlePSApi(): param_id = request.args.get('id..
11번 문제 golem 입니다. 문제의 핵심은 orge 문제처럼 admin의 pw를 찾는 것인데 먼저 guest의 query 를 무시하게 하고 admin 의 레코드를 얻어야 합니다. 그런데 이번엔 or, and, substr, '=' 문자열을 못쓰는군요.. 대체 기능으로 or는 '||'으로, and 는 %26%26, '=' 는 like 로 쿼리문을 변경하면 됩니다. 아래와 같이 입력하면 우선 admin 레코드는 얻는군요. 다음으로 파이썬 코드를 이용해서 최종적으로 암호를 얻어내서 통과합니다.
문제 9번 vampire 입니다. 이런, 8번에서 파악한 문제를 해결해버렸네요.. 입력된 value를 lower 로 변환후에 admin 과 비교를 하고 있습니다. 하지만, replace 구문을 역이용하면 되겠네요. 입력을 admadminin 을 하면 중간에 있는 admin 값만 없어지고 앞뒤에 있는 admin 이 남게됩니다.
문제 8번 troll 입니다 먼저 해석을 해보면 첫번째로 쿼트를 사용하지 못하고 admin 문자열을 넣지 않고서 admin 레코드를 얻어야 하는 문제입니다. 여기에서는 조건이 admin 을 넣으면 안되는 것이므로 Admin 을 입력해보면.. 그냥 풀리네요.. 이유는 뭘까요?? php 에서의 문자열 비교는 기본적으로 case-insensitive 입니다. 따라서 문자열의 대소문자를 구분하지 않고 같으면 true 조건으로 해결되는데 이를 해결하기 위해서는 '==' 대신에 '===' 를 사용해야 합니다.