반응형

PHP XSS 스크립터 공격 방어 정규식이다.

아래함수를 사용하여 방어하면된다.

하지만 가장 좋은방법은 HTML Purifier 라이브러리를 사용하는 것이다.

function xss_clean($data){ // html_decode 함수의 일종
        // 출처 : https://stackoverflow.com/questions/1336776/xss-filtering-function-in-php
        // Fix &entity\n;
        $data = str_replace(array('&','<','>'), array('&','<','>'), $data);
        $data = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $data);
        $data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data);
        $data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');

        // Remove any attribute starting with "on" or xmlns
        $data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);

        // Remove javascript: and vbscript: protocols
        $data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);
        $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);
        $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);

 


        // Only works in IE: <span style="width: expression(alert('Ping!'));"></span>
        $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
        $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
        $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data);

        // Remove namespaced elements (we do not need them)
        $data = preg_replace('#</*\w+:\w[^>]*+>#i', '', $data);

        do
        {
            // Remove really unwanted tags
            $old_data = $data;
            $data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
        }
        while ($old_data !== $data);

        // we are done...
        return $data;
    }
반응형
반응형

Mysql 나이 계산하는 방법(만 나이)

 

오늘 날짜 기준(2020년 05 29일)으로 결과가 26이 나온다.

SELECT FLOOR((CAST(REPLACE(CURRENT_DATE,'-','') AS UNSIGNED) - CAST('19931124' AS UNSIGNED)) / 10000);

 

만 나이로 계산하고 싶지 않으면 아래와 같이 사용하면 된다.

SELECT FLOOR((CAST(REPLACE(CURRENT_DATE,'-','') AS UNSIGNED) - CAST('19931232' AS UNSIGNED)) / 10000) + 2;

 

반응형
반응형

Mysql 동적 피벗 테이블로 조회

동적으로 열의 이름을 지정하여 조회하는 방법.

예시의 결과는 아래와 같다.

 

 

쿼리는 아래와 같다.

SET sql_mode = '';
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'count(case when 행정동코드 = ''',
      행정동코드 ,
      ''' then 1 end) AS ''',
      행정동이름
      ,''''
    )
  ) INTO @sql
FROM 행정동테이블;
;


SET @sql = CONCAT('SELECT IFNULL(행정동이름,''합계'') AS 지역, ', @sql, ',COUNT(*) AS 합계 
FROM 데이터테이블 A
LEFT JOIN 행정동테이블 B 
ON A.행정동코드 = B.행정동코드
group by 행정동이름
WITH ROLLUP
');

select @sql;

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

 

쿼리 작성시에 GROUP_CONCAT 의 길이가 짧아서 에러가 나는 경우가 있다.

 

이럴 경우

 

방법1.

my.conf 에서

[mysqld] 

group_concat_max_len = 50240;

추가

 

방법2.

SET @@ group_concat_max_len = 50240;

 

 

 

 

oracle 피벗 테이블 방법

https://wwwnghks.tistory.com/159

 

반응형
반응형

Mysql with rollup 사용시에

SQL 오류 (1055): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column

발생하는 경우

 

이유 : group by 하려는 항목중에 null이 있기때문이다.

해결 방법 : 쿼리문 그대로 작성하고 쿼리문 실행전에 SET sql_mode = ''; 를 실행한다.

 

SET sql_mode = '';
쿼리;

 

반응형
반응형

Mysql 날짜,시간 차이 계산

 

우선 함수로 각각 DATEDIFF, TIMESTAMPDIFF가 있다.

 

1. 날짜 차이 계산 [DATEDIFF]

SELECT DATEDIFF('2020-05-27 15:00:00','2020-05-20 13:00:00') AS DATEDIFF;

 

결과 : 7

 

2. 시간 차이 계산 [TIMESTAMPDIFF]

시간 표현 단위는 second, minute, hour, day, week, month, year, 등등 있다. 

SELECT TIMESTAMPDIFF(MINUTE, '2020-05-20 13:00:00','2020-05-20 17:00:00') AS TIMESTAMPDIFF;

결과 : 240

 

 

 

 

 

 

반응형
반응형

Mysql 에서 join 후 group by 시에 null값 혹은 0 값은 나오지 않을때

 

아래와 같이 쿼리 작성시에 null 인값은 출력되지 않는다.

select
  A.ID,
  A.name,
  count(B.score)
from TB_01 as A left join TB_02 as B on A.ID = B.ID
group by A.code;

 

아래와 같이 쿼리 작성시에 null 인값도 함께 출력된다.

SELECT
  A.ID,
  A.name,
  score,
  FROM TB_01 as A
  LEFT OUTER JOIN (
    SELECT
      ID, COUNT(score) AS score
      FROM TB_02
      GROUP BY ID
  ) as B on (A.ID = B.ID)
GROUP BY A.name

 

조건절은 각각 알아서 주거나, GROUP BY 전에 줘도 상관없다.

반응형
반응형

C4 부스터 후기

우선 영양성분표다. 

본인은 iherb에서 구입을 하는데 언어를 한국어로 설정하면 번역이 좀 이상하게 되서 나와서 둘 다 올린다.

 

노익스는 카페인이 275mg 들어있고, C4는 카페인은 135mg 들어있는거에 비해 2배 가량 차이가 나지만,

효과는 본인 기준 비슷한것같다.

 

비슷한 효과를 본다면 가성비 측면에서는 C4가 나은것같다.

 

가격은 30서빙 한통 X 2 

총 2통을 사면 44,389원이다.(iherb 기준) 

 

 

 

 

 

반응형
반응형

SSL 인증서를 변환해서 사용하는 방법

 

OPENSSL 명령어

--. pkcs8 encoding된 der형태의 개인키를 pkcs8인코딩된 pem형태의 개인키로 변경하는 경우
openssl pkcs8 -in SignPri.key -inform der -out signpri.pem -outform PEM

--. pkcs 1 개인키를 pkcs8 pem개인키로 변경
openssl pkcs8 -in aa.pem -inform pem -out bb.pem -outform PEM -topk8

--. pkcs 1 개인키를 pkcs8 der개인키로 변경
openssl pkcs8 -in aa.pem -inform pem -out bb.der -outform DER -topk8

--. pkcs 1 개인키를 pkcs5 pem 개인키로 변경(이때 triple DES로 암호화)
openssl rsa -in key.pem -des3 -out keyout.pem

 

[출처] openssl pem 포맷의 종류|작성자 jinkalee_new

반응형
반응형

Mybatis Type handler was null on parameter mapping for property '__frch_item_0.value'.  ### Error querying database.  Cause: java.lang.IllegalStateException: Type handler was null on parameter mapping for property '__frch_item_0.value'.  It was either not specified and/or could not be found for the javaType / jdbcType combination specified.
### Cause: java.lang.IllegalStateException: Type handler was null on parameter mapping for property '__frch_item_0.value'.  It was either not specified and/or could not be found for the javaType / jdbcType combination specified.

 

 

<foreach collection="orderList" item="item" index="index" separator="," open="(" close=")">
	#{item.value}
</foreach>

 

 

<foreach collection="orderList" item="item" index="index" separator="," open="(" close=")">
	 #{item, jdbcType=VARCHAR}
</foreach>

 

반응형
반응형

Mybatis

invalid comparison: java.util.ArrayList and java.lang.String

 

위의 에러 발생의 경우이다.

 

<if test="list !='' and list !=null">
	<foreach collection="list" item="item" index="index" separator="," open="(" close=")">
		#{item.value}
	</foreach>
</if>

list 의 경우는 != '' 와 비교가 안되서 발생하는 에러이다.

 

<if test="list.size != 0">
	<foreach collection="list" item="item" index="index" separator="," open="(" close=")">
		#{item.value}
	</foreach>
</if>

다음과 변경할 경우에 에러가 사라진다.

반응형

+ Recent posts