none
Данные для BulletedList RRS feed

  • Вопрос

  • Добрый день!!!

    <asp:BulletedList ID="BulletedList1" runat="server" 
        DataSourceID="SqlDataSource1" DataTextField="11" 
        DataValueField="11">
        </asp:BulletedList>

    Скажите пожалуйста как выбрать столбик для отображения ,в зависимости от определенных параметров?, например от данных ,которые получены с помощью request?

    1 марта 2012 г. 10:04

Ответы

Все ответы

  • BulletedList1.DataTextField = Request["showfield"];
    т.е. менять нужно DatasTextField, только осторожнее с Request, это ведь рассадник для SQL Injection
    • Предложено в качестве ответа iSanSYS 1 марта 2012 г. 14:25
    • Помечено в качестве ответа Program-s.g 2 марта 2012 г. 9:39
    1 марта 2012 г. 14:25
  • BulletedList1.DataTextField = Request["showfield"];
    т.е. менять нужно DatasTextField, только осторожнее с Request, это ведь рассадник для SQL Injection
    Ответив на этот  вопрос вы посоветовали использовать request для фильтрации данных listview, а для фильтрации не опасно использовать  request. А как сделать чтобы было безопасно? 
    • Помечено в качестве ответа Program-s.g 2 марта 2012 г. 9:39
    • Снята пометка об ответе Program-s.g 2 марта 2012 г. 9:39
    1 марта 2012 г. 15:19
  • Но request я получаю от ссылки, а  здесь написано "Это происходит только тогда, когда ваши запросы составлены с использованием внешних данных, которые принимаются от пользователя. "
    1 марта 2012 г. 15:26
  • Как ни крути, а в вебе мы всегда используем данные из реквеста и о безопасности стоит думать всегда

    В случае, если параметр запроса влияет на условие выборки - используйте параметры, Html/UrlEncode и т.п.

    http://msdn.microsoft.com/en-us/library/ff648339.aspx

    http://msdn.microsoft.com/en-us/magazine/cc163917.aspx

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

    Более правильный, будет скорее выбрать нужное поле до запроса данных, но не подставлять название поля из реквеста ), т.е. написать типа: if (req["fname"] == "field1") fields += " field1"; else fields += " fielddef"; 

    1 марта 2012 г. 19:40
  • Честно говоря я не понимаю как в этом случае использование request может быть причиной для атаки, приведу  пример простого кода

    <asp:BulletedList ID="BulletedList1" runat="server" 
        DataSourceID="SqlDataSource1" DataTextField="1" 
        DataValueField="1">
        </asp:BulletedList>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
        SelectCommand="SELECT * FROM [Table1]"></asp:SqlDataSource>

    И код для aspx.vb

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            BulletedList1.DataTextField = Request("id")
        End Sub
    Я понимаю так атака будет если в конец адреса добавить sql запрос???


    • Изменено Program-s.g 2 марта 2012 г. 7:30
    2 марта 2012 г. 7:28
  • Да не, так SQL Inj не будет ))

    Прост мало-ли - замахнетесь и вставите в сам запрос ) я же изначально просто писал быть осторожнее, и не говорил что прямо в этом месте может быть атака :)

    2 марта 2012 г. 8:20
  • Если вы возьмете данные из Request и будуте формировать запрос в коде методом простого сложения строк, то в этом случае точно может быь sql injection. Т.е.

    string sqlText = "Select * From Table Where field=" + Request["field"];

    А так как у вас сделано выше - все должно быть безопасно.


    Для связи [mail]

    2 марта 2012 г. 8:30
    Модератор
  • Спасибо за ответы, еще один маленький вопрос и все

    Я так понимю, что в этом случае тоже будет безопасно

    <asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1">
        <ItemTemplate>
        <%#Eval("names") %>
        </ItemTemplate>
            <EmptyDataTemplate>No FInd</EmptyDataTemplate>
        </asp:ListView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
            SelectCommand="SELECT * FROM [Table1] where name=@name">
           <SelectParameters>
        <asp:Parameter Name="name" Type="string" DefaultValue="1" />
      </SelectParameters></asp:SqlDataSource>

     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            SqlDataSource1.SelectParameters("name").DefaultValue = Request("name")
           
        End Sub


    • Изменено Program-s.g 2 марта 2012 г. 8:58
    2 марта 2012 г. 8:55
  • Учитывая что вы используете параметризированный запрос, то отчасти можно считать его безопасным, по крайней мере кавычками его не уронишь, но рекомендую попробовать и если упадет отписаться, давно не использовал )
    2 марта 2012 г. 9:01