Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Безопастность использование рег выражений в js, Безопастность использования 
:(
    Опции темы
acdcee
Дата 28.8.2007, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.7.2007

Репутация: нет
Всего: 1



Собствено вопрос такой....

Есть редактор..... написаный не так давно, писал сам.... но не все... не которые момент не то что бы переняты.... а написаны по примеру.... 

И так в нем есть часть кода которая фиксит текст при событии onsubmit в коде написано все

Устроено так что есть у нас поле textarea при подключении сценария оно заменяет DOM методом другим.... перенимаецо от туда id  и все....
Пишем мы в другом textarea которое создали после существующего, при событии onsubmit данные передаюцо в нормальное поле....
Регулярные выражения сразу же меняют весь bb-code на html код и все тому подобное!!!!

На сколько безопастно такое метод использования рег выражений?????

Код

function txnEngine_bbCode(){};
var txnDoc = document,count = 0,toolbar,editor,src_icons="/theme/icons/",add_buttons,wWidth;
var named_colors = {'#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',
    '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown',
    '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue',
    '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod',
    '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen',
    '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue',
    '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue',
    '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen',
    '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey',
    '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory',
    '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue',
    '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen',
    '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey',
    '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',
    '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue',
    '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin',
    '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid',
    '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff',
    '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue',
    '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver',
    '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen',
    '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',
    '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen'
};

var font_name = ["Tahoma","Arial Black","sans-serif","Helvetica","Arial","Geneva","Verdana","serif","Times New Roman","Courier","Courier New"];
    
//Симуляция insertAdjacentElement если браузер не поддерживает его по умолчанию (в IE встроен)
if(typeof(HTMLElement) !="undefined" && !HTMLElement.prototype.insertAdjacentElement){
    HTMLElement.prototype.insertAdjacentElement = function(where,insertNode){
        switch(where){
            case"beforeBegin":
                this.parentNode.insertBefore(insertNode,this);
            break;
            case"afterBegin":
                this.insertBefore(insertNode,this.firstChild);
            break;
            case"beforeEnd":
                this.appendChild(insertNode);
            break;
            case"afterEnd":
                if(this.nextSibling){
                    this.parentNode.insertBefore(insertNode,this.nextSibling);
                }else{
                    this.parentNode.appendChild(insertNode);
                }
            break;
        }
    }
    //симуляция insertAdjacentHTML если браузер не поддерживает его по умолчанию (в IE встроен)
    HTMLElement.prototype.insertAdjacentHTML = function (where,insertHTML){
        var owDoc = this.ownerDocument.createRange();
        owDoc.setStartBefore(this);
        var parsedHTML = owDoc.createContextualFragment(insertHTML);
        this.insertAdjacentElement(where,parsedHTML);
    }
};    

txnEngine_bbCode.prototype = {
    init:function(settings){
        this.settings = settings;
        this.MSIE = (navigator.appName == "Microsoft Internet Explorer");
        this.isOpera = (navigator.userAgent.indexOf("Opera") !=-1);
        this.isMoz = (navigator.userAgent.indexOf("Mozilla") !=-1);
        this.isGecko = (navigator.userAgent.indexOf("Gecko") !=-1);
        var elm = txnDoc.getElementById(this.settings["editor_id"]);
        elm.style.display = 'none';
        this.documentBaseUrl = window.location.href;
        this.documentBaseUrl = this.documentBaseUrl.substring(0, this.documentBaseUrl.lastIndexOf('/'));
        txnDoc.write("<link href=\""+this.documentBaseUrl+"/theme/css/editor_style.css\" rel=\"stylesheet\" type=\"text/css\" />");
        toolbar = "<table style=\"width:"+elm.offsetWidth+"\" border=0 class=\"toolbar\" cellpadding=0 cellspacing=0><tr>";
        add_buttons = settings["toolbar_buttons"];
        for(i in add_buttons){
            count++;
            switch(add_buttons[i]){
                default:
                    if(add_buttons[i] !="size" && add_buttons[i] !="family" && add_buttons[i] !="color"){
                    toolbar +="<td align=\""+this.settings["position"]+"\"><img src=\""+this.documentBaseUrl+src_icons+add_buttons[i]+".gif\" class=\"buttons\" onClick=\"txnBBcode.insertCode('"+add_buttons[i]+"','"+this.settings["editor_id"]+"');\" border=0></td>";
                    }
                break;
                
                case"img":
                    toolbar +="<td align=\""+this.settings["position"]+"\"><img src=\""+this.documentBaseUrl+src_icons+add_buttons[i]+".gif\" class=\"buttons\" onClick=\"txnBBcode.insertImage('"+add_buttons[i]+"','"+this.settings["editor_id"]+"');\" border=0></td>";
                break;
                
                case"url":
                    toolbar +="<td align=\""+this.settings["position"]+"\"><img src=\""+this.documentBaseUrl+src_icons+add_buttons[i]+".gif\" class=\"buttons\" onClick=\"txnBBcode.insertUrl('"+add_buttons[i]+"','"+this.settings["editor_id"]+"');\" border=0></td>";
                break;
            }
        }
        toolbar+="</tr></table>";
        toolbar2 = "<table style=\"width:"+elm.offsetWidth+"\" border=0 class=\"toolbar\" cellpadding=0 cellspacing=0><tr>";
        for(i in add_buttons){
            count++;
            switch(add_buttons[i]){
                case"size":
                    toolbar2+="<td align=\""+this.settings["position"]+"\"><select name=\"size\" onChange=\"txnBBcode.insertCode('"+add_buttons[i]+"','"+this.settings["editor_id"]+"',this.options[selectedIndex].value);\"><option> - Font Size - </option><option value=\"8pt\">1 (8pt)</option><option value=\"10pt\">2 (10pt)</option><option value=\"12pt\">3 (12pt)</option><option value=\"14pt\">4 (14pt)</option><option value=\"18pt\">5 (18pt)</option><option value=\"24pt\">6 (24pt)</option><option value=\"36pt\">7 (36pt)</option></select></td>";
                break;
                
                case"family":
                    toolbar2+="<td align=\""+this.settings["position"]+"\"><select onChange=\"txnBBcode.insertCode('"+add_buttons[i]+"','"+this.settings["editor_id"]+"',this.options[selectedIndex].value);\"><option>- Font Name -</option>";
                    for(i in font_name){
                        toolbar2+="<option value=\""+font_name[i]+"\">"+font_name[i]+"</option>";
                    }
                toolbar2+="</select></td>";
                break;
                
                case"color":
                    toolbar2+="<td align=\""+this.settings["position"]+"\"><select onChange=\"txnBBcode.insertCode('"+add_buttons[i]+"','"+this.settings["editor_id"]+"',this.options[selectedIndex].value);\"><option>- Font Color -</option>";
                for(i in named_colors){
                    toolbar2+="<option style=\"color:"+i+"\" value=\""+i+"\">"+named_colors[i]+"</option>";
                }
                toolbar2+="</select></td>";
                break;
            }
            if(count == 12){
                toolbar2+="</tr><tr>";
            }
        }
        toolbar2+="</tr></table>";

        editor = txnDoc.createElement("textarea");
        editor.setAttribute("id","txnEngine"+this.settings["editor_id"]);
        editor.setAttribute("wrap","soft");
        editor.setAttribute("rows",elm.rows);
        editor.setAttribute("cols",elm.cols);
        editor.className = "txnBBcodeEditor";
        
        elm.insertAdjacentElement("afterEnd",editor);
        elm.insertAdjacentHTML("afterEnd",toolbar+toolbar2);
        if(this.MSIE || this.isOpera){
            for(var idX =0;idX<txnDoc.forms.length;idX++){
                txnDoc.forms[idX].attachEvent("onsubmit",function(){txnBBcode.updateArea(settings["editor_id"]);});
            }
        }else if(this.isMoz || this.isGecko){
            for(var idX =0;idX<txnDoc.forms.length;idX++){
                txnDoc.forms[idX].addEventListener('submit',function OnSumbmit() { txnBBcode.updateArea(settings["editor_id"]);}, true);
            }
        }
    },
    
    insertCode:function(code,editor_id,value){
        var editor = txnDoc.getElementById("txnEngine"+editor_id);var ltag,rtag;
        switch(code){
            
            case "color":
                ltag = '[color='+value+']';
                rtag = '[/color]';
            break;
            
            case"size":
                ltag = '[size='+value+']';
                rtag = '[/size]';
            break;
            
            case"family":
                ltag = '[family='+value+']';
                rtag = '[/family]';
            break;
            
            case"font":
                ltag = '[font='+value+']';
                rtag = '[/font]';
            break;
            
            case"hr":
                ltag = '[hr]';
                rtag = '';
            break;
            
            case"list":
                ltag = '\t[*]';
                rtag = '';
            break;
            
            default:
                ltag = '['+code+']';
                rtag = '[/'+code+']';
            break;
            
        }
        this.inserInstanceSelect(ltag,rtag,editor);
    },
    
    updateArea:function(editor_id){
        if(this.MSIE){
        txnDoc.getElementById(editor_id).value = this.fixText(txnDoc.getElementById("txnEngine"+editor_id).innerHTML);
        }else{
            txnDoc.getElementById(editor_id).value = this.fixText(txnDoc.getElementById("txnEngine"+editor_id).value);
            return;
        }
    },
    
    fixText:function(text){
        function rep(re,str){
            text = text.replace(re,str);
        };
        
        rep(/\[b\](.*?)\[\/b\]/gi,"<b>$1</b>");
        rep(/\[i\](.*?)\[\/i\]/gi,"<i>$1</i>");
        rep(/\[u\](.*?)\[\/u\]/gi,"<u>$1</u>");
        rep(/\[hr\]/gi,"<hr>");
        rep(/\[list\]\n\[\/list\]/gi,"");
        rep(/\[\*\]/g,"<li>");
        rep(/\[s\](.*?)\[\/s\]/gi,"<strike>$1</strike>");
        rep(/\[left\](.*?)\[\/left\]/gi,"<div align=left>$1</div>");
        rep(/\[center\](.*?)\[\/center\]/gi,"<div align=center>$1</div>");
        rep(/\[right\](.*?)\[\/right\]/gi,"<div align=right>$1</div>");
        rep(/\[justify\](.*?)\[\/justify\]/gi,"<div align=justify>$1</div>");
        rep(/\[color=(\#[A-Z0-9]{6}|[a-z]+)\](.*?)\[\/color\]/gi,"<span style=\"color:$1\">$2</span>");
        rep(/\[size=([0-9a-z]+)\](.*?)\[\/size\]/gi,"<span style=\"font-size:$1\">$2</span>");
        rep(/\[family=([A-Za-z ]+)\](.*?)\[\/family\]/gi,"<span style=\"font-family:$1\">$2</span>");
        rep(/\[url=([\w]+?:\/\/[\w\#$%&~\/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[\/url\]/gi,"<a href=\"$1\" target=\"_balnk\">$2</a>");
        rep(/\[img=([\w]+?:\/\/[\w\#$%&~\/.\-;:=,?@\[\]+]*?|[\w\#$%&~\/.\-;:=,?@\[\]+]*?) alt=([a-zA-Zа-яА-Я0-9\_\-\. ]+)\]/gi,"<img src=\"$1\" border=\"0\" alt=\"$2\" title=\"$2\" />");
        rep(/\r/gi,"<br>");
        rep(/\r\n/gi,"<br><br>");
        rep(/<DIV.*align=left.*>(.*?)<\/DIV>/gi,"$1");
        rep(/\[quote\](.*?)\[\/quote\]/gi,"<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" border=\"0\" style=\"border: #2666B9 1px dashed;padding:6px;\"><tr><td style=\"background: #FAA9CF;text-align: left;vertical-align: middle;padding-left:6px;\">Цитата...</td></tr><tr><td style=\"background: #FADAA5;text-align: left;vertical-align: top;height:30;padding:6px;\">$1</td></tr></table>");
        if(text.indexOf("scipt") !=-1 || text.indexOf("/scipt") !=-1 || text.indexOf("applet") !=-1 || text.indexOf("<?") !=-1 || text.indexOf("<%") !=-1  || text.indexOf("'") !=-1 || text.indexOf("textarea") !=-1){
        rep(/\</gi,"&lt;");
        rep(/\>/gi,"&gt;");
        rep(/\&/gi,"&amp;");
        rep(/\"/gi,"&quot;");
        }
        return text;
    },
    inserInstanceSelect:function(tagS,tagE,editor){
        var editor = editor;
        editor.focus();
        if(txnDoc.selection){
            var textNodes = txnDoc.selection.createRange();
            var selText=textNodes.text? 0 :-tagE.length;
            textNodes.text=tagS+textNodes.text+tagE;
            textNodes.move('character',selText);
            textNodes.select();
        }else{
            if(typeof(editor.selectionStart)!="undefined"){
                var beforeNode = editor.selectionStart;
                var afterNode = editor.selectionEnd;
                
                textBefore = editor.value.substring(0,beforeNode);
                textNode = editor.value.substring(beforeNode,afterNode);
                textAfter = editor.value.substring(afterNode);
                
                editor.value = textBefore+tagS+textNode+tagE+textAfter;
                //editor.value = setSelectionRange(beforeNode,beforeNode);
            }else{
                editor.value = editor.value + textNode;
            }
        }
    },
    
    insertUrl:function(code,editor_id){
        var link_url='',ltag,rtag,editor = txnDoc.getElementById("txnEngine"+editor_id);
        link_url = prompt("Введите адрес ссылки:","http://");
        if(!link_url) return alert("Вы не ввели адрес");
        switch(code){
            case"url":
                ltag = '[url='+link_url+']';
                rtag = '[/url]';
            break;
            
        }
        this.inserInstanceSelect(ltag,rtag,editor);
    },
    
    insertImage:function(code,editor_id){
        var path_img='',alt='',ltag,rtag,editor = txnDoc.getElementById("txnEngine"+editor_id);
        path_img = prompt("Введите путь к картинке:","http://");
        alt = prompt("Введите альтернативный текст:","");
        if(!alt || !path_img) return alert("Вы ввели один из не верных параметров");
        switch(code){
            case"img":
                ltag = '[img='+path_img+' alt='+alt+']';
                rtag = '';
            break;
            
        }
        this.inserInstanceSelect(ltag,rtag,editor);
    }
}

var txnBBcode = new txnEngine_bbCode();


Добавлено через 2 минуты и 24 секунды
вот продолжение сама страница

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Untitled</title>
    <script language="JavaScript" src="txnEngine.js" type="text/javascript"></script>
</head>
<body>
<form action="http://prime/pos.php" method="post">
<textarea id="text" name="text1" cols="50" rows="10">dsdsds</textarea>
<script>
txnBBcode.init({
"editor_id" : "text",
"position" : "center",
"toolbar_buttons" : ["b","i","u","s","left","center","right","justify","url","img","quote","hr","list","size","family","color"]
});
</script>
<input type="Submit" value="Ñîõðàíèòü">
</form>
</body>
</html>

PM MAIL   Вверх
dXdYdZ
Дата 2.9.2007, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 16.4.2007

Репутация: 0
Всего: 4



Что Вы имеете в виду под безопасностью?
PM MAIL   Вверх
acdcee
Дата 14.9.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.7.2007

Репутация: нет
Всего: 1



А  то что скрипты (avascript) выполняется на стороне клиента

Добавлено через 4 минуты и 35 секунд
Безопастность в том можно каким нить способ повлиять на то как там заменяюца бб теги на html,  в плохую сторону что нить другое вписать или как нить повлиять на это??? я просто не все аспекты знаю, и даже если что то написал то не значит что я что то знаю, мне хочется узнать про безопастность использования рег выражений и не только в javascript потому как весь текст пойдет в бд и так далее
PM MAIL   Вверх
Fin
Дата 14.9.2007, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



Основное правило: Клиенту нельзя доверять. JavaScript можно выключить. Поменить запрос и т.д. Поэтому все что приходит от клиента нужно проверять на стороне сервера.


--------------------
Пролетал мимо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема »


 




[ Время генерации скрипта: 0.0673 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.