모듈에서 불가피하게 커스텀쿼리를 사용하게 되는 상황이 되었습니다..
그런데 커스텀쿼리를 짜려고 해도 XE+RX1과 RX2를 분기를 해야하는 상황이 되더라고요
그래서 함수를 만들어 파라메터는 동일하게, 값도 동일하게 출력하는데, RX 버전에 따라서 쿼리 실행방식을 분기 하려고 합니다
함수를 한번 짜봤는데 보안상 문제가 있는게 확실하지만 어디를 보완해야 할지 감잡기가 어려워서 한번 올려봅니다
<?php if(!defined('__XE__')) exit(); class Test { private $oDB; private $isRX2; public function __construct() { $this->oDB = DB::getInstance(); $this->isRX2 = (version_compare(__XE_VERSION__, '2.0', '>=')); } public function _sqlExecute($sql, $variable = array()) { if ($this->isRX2) { // Rhymix 2 이상 $query = $this->oDB->prepare($sql); $query->execute($variable); $result = $query->fetchAll(); } else { // 기존 코드 $sql = $this->oDB->addPrefixes($sql); $sql_part = explode('?', $sql); $new_sql = ''; for ($i = 0; count($sql_part) - 1 > $i; $i++) { $var = (is_int($variable[$i])) ? $variable[$i] : sprintf("'%s'", $variable[$i]); $new_sql .= $sql_part[$i] . $var; } $new_sql .= $sql_part[count($sql_part) - 1]; $query = $this->oDB->_query($new_sql); $result = $this->oDB->_fetch($query); } return $result; } }
RX2는 의도한대로 짠거 같은데, 그 외 코드는 구구주먹식으로 짜서 보기 예쁘지는 않습니다 ㅎ;
까일때는 가슴아프지만 (흙..) 취약점을 열심히 까주시면 고맙겠습니다!
XE+RX1에도 prepared statement를 사용할 수 있으면 좋은데 말이죠..
addPrefixes 함수는 PDO 지원과 함께 추가되었으므로 addPrefixes를 사용할수 있다면 그냥 PDO를 사용하면 그만입니다.