Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
TLoD,Snake 06.12.2006 18:47
@process_hobby[hobby_txt][hobbys;words;hobby;hid;hobby_html] $hobby_html[] ^void:sql{DELETE FROM user_hobby WHERE uid=^user.id.int[]} $hobbys[^hobby_txt.split[,;v]] $result[ ^hobbys.menu{ $words[ ^hobbys.piece.split[ ;v] ] $hobby[^words.menu{^words.piece.trim[]}[ ]] ^if(^hobby.length[] < 256 && ^hobby.match[^^[\w\-]+^$]){ <a href="/userlist.html?act=search&hobby=^taint[uri][$hobby]">$hobby</a> $hid(^int:sql{SELECT id FROM hobby WHERE name='^taint[sql][$hobby]'}[$.default(0)]) ^if(!$hid){ ^void:sql{INSERT INTO hobby (name) VALUES('^taint[sql][$hobby]')} $hid(^int:sql{SELECT LAST_INSERT_ID() FROM hobby}[$.default(0) $.limit(1)]) } ^void:sql{INSERT INTO user_hobby (uid, hid) VALUES(^user.id.int[], $hid)} }{ ^taint[html][$hobby] } }[, ] ]В переменной $result получаем то что надо, плохие куски запачканы как html, наши ссылки чистые. Но, если дальше пихнуть это в SQL
@update[param][set] ^if($user){ ^if(def $param.hobby){ ^dbconnect{ $param.hobby_html[^process_hobby[$param.hobby]] } } $set[^param.foreach[key;value]{^if($value is string || !def $value){$key='^taint[sql][$value]'}{$key=$value}}[, ]] ^MAIN:dbconnect{ ^void:sql{UPDATE user SET $set WHERE id=$user.id} } $result(1) }то все счастье исчезает, так как код метится, как sql ^taint[sql][$value], но если это убрать, то при присутствии в тексте одинарной кавычки SQL запрос рушится.