• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Webquerysave агенты

imendan

Green Team
22.09.2010
159
4
BIT
0
Здравствуйте, коллеги! Я никогда не писал на лотусе по Веб. Нужна ваша помощь!
При сохранении в браузере под WebQuerySave я вызываю агент X'.
При попытке сохранения документа данный агент проводит проверку на заполняемость,
на повторяемость, на правильность заполнения и многие другие проверки. Если что-то
заполнено неправильно или не заполнено, то на форму должно выйти сообщение о
текущей ошибке. Сама форма в это время должна остаться неизменной, со всеми введенными
данными в ней. Проверка происходит правильно, сохранять не дает. Но вот alert не работает.
Я перерыл весь интернет, сроки жмут, начальство торопит, пробовал 312 вариантов. Но ничего
не помогло. Что делать? SOS :)
Примерный код:
...
set doc = session.DocumentContext
if doc.Field1(0)="" then
_ doc.SaveOptions="0"
_ Print |<script language="JavaScript" type="text/javaScript">|
_ Print |history.back();|
_ Print |alert("Заполните поле FIELD1");</script>|
_ exit sub
end if
...
 
X

xKlonx

Есть серверная и клиентская обработка, алерты нужно обрабатывать на стороне клиента,а не вызовом агента

Добавлено: В вашем случае проверку можно сделать повесив яваскрипт код на событие onSubmit. Небольшой пример:
Код:
if (document.forms[0].Phone.value=="") {
alert('Please enter a value for the "Phone" field');
document.forms[0].SelectProduct.selectedIndex=0;
document.forms[0].Phone.focus();
return false; }
return true
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
если хоца делать валидацию на сервере - мона заюзать Ajax
в случае ошибки - плевать xml с ошибкой и парсить клиентом (кусок extJS месюг, но их можно на алерты заменить):
JavaScript:
	var xml = response.responseXML;
if(xml) var errors = xml.getElementsByTagName('error');

if(!errors || !errors.length)
{
//здесь всё ок
}
else
{
var l = errors.length;
var msg = '';
for(var f=0; f<l; f++)
{
msg += errors[f].firstChild.nodeValue+'\n';
}
Ext.MessageBox.alert('Ошибка', msg,
{icon: Ext.MessageBox.ERROR});
}

ошибка плювается так (java, мона переделать на LS):<!--shcode--><pre><code class='java'> public void printStackTrace(Exception e){
e.printStackTrace();
if (pwout!=null){
printResponseHeader();
pwout.print("<error>");
e.printStackTrace(pwout);
pwout.print("</error>");
}
}

public void printResponseHeader(){
if (!isPrintedHeader && pwout!=null) {
pwout.println ("Content-Type: text/xml; charset=UTF-8");
pwout.println ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
pwout.println("<response>");
isPrintedHeader=true;
}
}
public void printError(String msg){
printResponseHeader();
pwout.println("<object>"+this.getClass().getName()+"<error>"+msg+"</error></object>");
}
public void printResponseEnd(){
if (isPrintedHeader && pwout!=null) {
if(!isPrintedEnd){
pwout.println("</response>");
pwout.flush();
isPrintedEnd=true;
}
}
}
public void close(){
printResponseEnd();
}
public void finalize(){
printResponseEnd();
}[/CODE]
 
K

K-Fire

Примерный код:
...
set doc = session.DocumentContext
if doc.Field1(0)="" then
_ doc.SaveOptions="0"
_ Print |<script language="JavaScript" type="text/javaScript">|
_ Print |history.back();|
_ Print |alert("Заполните поле FIELD1");</script>|
_ exit sub
end if
...

Надо content type установить в application/script, или типа того перед тем как принты будут отрабатывать.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
K-Fire
это рпавильно (Content-Type принтовать), но сама логика вывода (таким образом) скрипта - несколько "убога" :)
 
K

K-Fire

K-Fire
это рпавильно (Content-Type принтовать), но сама логика вывода (таким образом) скрипта - несколько "убога" ;)
А что в разработке веба на лотусе не убого скажите мне? :)

Да и вообще любая разработка под веб убога...
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
я касательно javascript выводить, в клиента, таким образом :)
зачем пихать клиенту то, что он сам может делать (забрать ответ об ошибке и распарсить)
 
K

K-Fire

я касательно javascript выводить, в клиента, таким образом ;)
зачем пихать клиенту то, что он сам может делать (забрать ответ об ошибке и распарсить)
А как он это сделает? WQS возвращает респонз, по сути это другая страница уже. Нужно придумывать геморрой типа установки некого флага, на onload запускать скрипт который проверит флаг и выдаст алерт. При корректном завершении этот флаг сбрасывать. Бррр...

Или делать еще больший гемор с вызовом WQS агента аяксом, а потом парсить респонз и понимать что там вообще произошло? Бррр... :)
 

imendan

Green Team
22.09.2010
159
4
BIT
0
Есть серверная и клиентская обработка, алерты нужно обрабатывать на стороне клиента,а не вызовом агента

Добавлено: В вашем случае проверку можно сделать повесив яваскрипт код на событие onSubmit. Небольшой пример:
Код:
if (document.forms[0].Phone.value=="") {
alert('Please enter a value for the "Phone" field');
document.forms[0].SelectProduct.selectedIndex=0;
document.forms[0].Phone.focus();
return false; }
return true

Тогда ставится вопрос, как этим скриптом войти выполнить следующую проверку:
(еще пару строк из первого агента):
set view = db.GetView("viewform1check")
key = doc.Field1(0) + doc.Field2(0) + doc.Field3(0)
set col = view.GetAllDocumentsBuKey(key)
if col.Count>0 then
Print |<script language="JavaScript" type="text/javaScript">|
Print |history.back();|
Print |alert("Ошибка! Запрещено вручать одну и ту же награду");</script>|
end if

Там еще проходит проверка на существование в полях разных ненужных символов (точка и т.д.),
а также в русских полях, проверка на существования символов казахского языка (запрещено). Может
ли кто привести пример как это сделать, тогда можно будет всю проверку проводить просто
JavaScript-ом изначально.
 
H

hosm

Там еще проходит проверка на существование в полях разных ненужных символов (точка и т.д.),
а также в русских полях, проверка на существования символов казахского языка (запрещено). Может
ли кто привести пример как это сделать, тогда можно будет всю проверку проводить просто
JavaScript-ом изначально.
это можно, посмотрите для строки indexOf и регулярки.
единственный минус, что яваскриптовую проверку можно легко отключить, так что лучше дублировать на сервере.
тот код, что выше- имхо, можно через аджакс-запрос к серверу.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
Или делать еще больший гемор с вызовом WQS агента аяксом, а потом парсить респонз и понимать что там вообще произошло? Бррр... smile.gif
ещё больший Бррр - генерить часть клиентского кода на сервере - т.е будем программить одновременно в двух местах ага :)
понятно gwt гугл создал - там оно автоматически, но руками, по собственной воле - м-да
 

imendan

Green Team
22.09.2010
159
4
BIT
0
ещё больший Бррр - генерить часть клиентского кода на сервере - т.е будем программить одновременно в двух местах ага :)
понятно gwt гугл создал - там оно автоматически, но руками, по собственной воле - м-да

А вообще, кто-нибудь знает реально ли через WQS-агент делать alert-ы на веб форму? Если да, то как,
если нет, то почему? Плиз помогите. Просто не охота делать другими методами, там уже столько проверок выполнено, что делать это на яве или другими методами, просто большая работа. :)

Добавлено:
ещё больший Бррр - генерить часть клиентского кода на сервере - т.е будем программить одновременно в двух местах ага :)
понятно gwt гугл создал - там оно автоматически, но руками, по собственной воле - м-да

А вообще, кто-нибудь знает реально ли через WQS-агент делать alert-ы на веб форму? Если да, то как,
если нет, то почему? Плиз помогите. Просто не охота делать другими методами, там уже столько проверок выполнено, что делать это на яве или другими методами, просто большая работа. :newconfus:
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
STFG: Content-type site:codeby.net
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
3
А вообще, кто-нибудь знает реально ли через WQS-агент делать alert-ы на веб форму? Если да, то как,
если нет, то почему? Плиз помогите. Просто не охота делать другими методами, там уже столько проверок выполнено, что делать это на яве или другими методами, просто большая работа. ;)

Конечно реально, лет 15 уже:) Точно так же как и на других платформах - на PHP как это происходит?
Сабитятся форма, апликуха проводит проверки и плюют обратно морду лица с внедренным уже алертом:)
Есть более изящный варианты, когда перед сабмитом или в процессе ввода данных проверяются поля формы на валидность - тут уж AJAX вам в руки. Т.е. через AJAX запрос посылается значения полей и возвращается результат проверки. Т.е. ваши наработки можно сохранить:)
 

imendan

Green Team
22.09.2010
159
4
BIT
0
я это предлагал - отвергают ;)
:lovecodeby: Imike! Спасибо большое за совет! Я пришел к тому, что без Ajax не обойтись :)
Честно говоря, я даже воспользоваться вашими не знаю как? может еще что-нибудь предложите?
или скинете самый минимальный пример. а то никак ((( вообще не догоняю...
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
IMENDAN
дык выше и написано - там минимум кода, что в нём непонятно?
pw.println - это Print на LS
в случае ошибки вызыв. либо эксепшн с printStackTrace либо printError

close вызывается по окончании агента

ну там защита от повторной печати хидера и закрывающего тега

всё выводится строками, с нодами XML (какие пожелаете)
на клиенте анализируется ответ (код javascript)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!