elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Temas
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12
11  Seguridad Informática / Seguridad / ¿Porque el comando shred hace tantas iteraciones (minimo 3) para un borrado seguro? | Seguridad en: 13 Diciembre 2021, 23:23 pm
Buenos dias.

Siempre he tenido una pregunta curiosa sobre el comando shred....

Como bien sabemos el comando shred, nos permite hacer un borrado seguro desde cualquier distribucion.

Yo acostumbro mucho a utilizar estos parametros

Citar
shred -vuz -n 10 <file>

Los parametros son:
  • -u: Elimina el archivo una vez sobrescrito
  • -z: Sobrescribe el archivo a zeros (supongo que es el que se encarga de convertir los bits 1 a 0)
  • -v: Pinta por pantalla el proceso de shred
  • -n: Numero de sobrescrituras que hace antes de eliminar el archivo (si esta el -u)

Ok, hasta aquí lo entiendo, pero la pregunta del millon..... ¿Porque tantas pasadas?

Yo lo entiendo así, y es que, el -z convierte los bits 1 a 0, haciendo que este no se pueda recuperar con alguna herramienta foranea (ejemplo: foremost).

Se dice que (o lo he leido/oido) que cuando más pasadas más seguro es y...¿menos posible de recuperar? eso me suena, pero de donde.

En caso de que se pueda recuperar,¿no es imposible auque sea una unica pasada (sobrescrito una iteracion)?

No acabo de entender porque tantas iteraciones...

Es por mera curiosidad...para entender más sobre su funcionamiento auque no he visto ningún sitio que explicara la razon de las iteraciones....

Además la salida que este imprime en pantalla....como lo interpreto??
Citar
$ shred -uzv -n 5 2021-12-04-23-07-11.031-VBoxSVC-1990.log
shred: 2021-12-04-23-07-11.031-VBoxSVC-1990.log: pass 1/6 (random)...
shred: 2021-12-04-23-07-11.031-VBoxSVC-1990.log: pass 2/6 (000000)...
shred: 2021-12-04-23-07-11.031-VBoxSVC-1990.log: pass 3/6 (random)...
shred: 2021-12-04-23-07-11.031-VBoxSVC-1990.log: pass 4/6 (ffffff)...
shred: 2021-12-04-23-07-11.031-VBoxSVC-1990.log: pass 5/6 (random)...
shred: 2021-12-04-23-07-11.031-VBoxSVC-1990.log: pass 6/6 (000000)...
shred: 2021-12-04-23-07-11.031-VBoxSVC-1990.log: removing
shred: 2021-12-04-23-07-11.031-VBoxSVC-1990.log: renamed to 0000000000000000000000000000000000000000
shred: 0000000000000000000000000000000000000000: renamed to 000000000000000000000000000000000000000
shred: 000000000000000000000000000000000000000: renamed to 00000000000000000000000000000000000000
shred: 00000000000000000000000000000000000000: renamed to 0000000000000000000000000000000000000
shred: 0000000000000000000000000000000000000: renamed to 000000000000000000000000000000000000
shred: 000000000000000000000000000000000000: renamed to 00000000000000000000000000000000000
shred: 00000000000000000000000000000000000: renamed to 0000000000000000000000000000000000
shred: 0000000000000000000000000000000000: renamed to 000000000000000000000000000000000
shred: 000000000000000000000000000000000: renamed to 00000000000000000000000000000000
shred: 00000000000000000000000000000000: renamed to 0000000000000000000000000000000
shred: 0000000000000000000000000000000: renamed to 000000000000000000000000000000
shred: 000000000000000000000000000000: renamed to 00000000000000000000000000000
shred: 00000000000000000000000000000: renamed to 0000000000000000000000000000
shred: 0000000000000000000000000000: renamed to 000000000000000000000000000
shred: 000000000000000000000000000: renamed to 00000000000000000000000000
shred: 00000000000000000000000000: renamed to 0000000000000000000000000
shred: 0000000000000000000000000: renamed to 000000000000000000000000
shred: 000000000000000000000000: renamed to 00000000000000000000000
shred: 00000000000000000000000: renamed to 0000000000000000000000
shred: 0000000000000000000000: renamed to 000000000000000000000
shred: 000000000000000000000: renamed to 00000000000000000000
shred: 00000000000000000000: renamed to 0000000000000000000
shred: 0000000000000000000: renamed to 000000000000000000
shred: 000000000000000000: renamed to 00000000000000000
shred: 00000000000000000: renamed to 0000000000000000
shred: 0000000000000000: renamed to 000000000000000
shred: 000000000000000: renamed to 00000000000000
shred: 00000000000000: renamed to 0000000000000
shred: 0000000000000: renamed to 000000000000
shred: 000000000000: renamed to 00000000000
shred: 00000000000: renamed to 0000000000
shred: 0000000000: renamed to 000000000
shred: 000000000: renamed to 00000000
shred: 00000000: renamed to 0000000
shred: 0000000: renamed to 000000
shred: 000000: renamed to 00000
shred: 00000: renamed to 0000
shred: 0000: renamed to 000
shred: 000: renamed to 00
shred: 00: renamed to 0
shred: 2021-12-04-23-07-11.031-VBoxSVC-1990.log: removed

Si alguíen me lo puede explicar, para entender....se lo agradeceria.

Gracias de antemano.  :D
12  Programación / Scripting / ¿Como coger el PID de un proceso hijo que ha hecho Event.set()? | Python3 multiprocessing Event en: 13 Noviembre 2021, 20:47 pm
Buenas. Estoy haciendo una arquitectura servidor-multicliente con sockets in python3

Para esto utilizo la libreria multiprocessing
Código
  1. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  2. sock.bind(("",PORT))
  3. sock.listen(CLIENTS)
  4. print(logFile().message(f"running ClassAdmin server, listen {CLIENTS} clients by port {PORT}...",True,"INFO"))
  5. sockSSL = context.wrap_socket(sock,server_side=True)
  6. childProcess = [] # This storages the childs processes
  7. event = multiprocessing.Event() # listening events of childs processes
  8. threading.Thread(target=Client.handlerEvent,name="exitChildProcess",args=(event,childProcess,)).start()
  9. while sockSSL:
  10.    connection, address = sockSSL.accept()
  11.    subproccess = multiprocessing.Process(target=Client,name="client",args=(connection,address,event))
  12.    subproccess.start()
  13.    childProcess.append(subproccess)
  14.    time.sleep(1)
  15.  
En este código, la variable  'event' is un evento de la libreria multiprocessing que esta en escucha de que algún proceso hijo lo active.

Código
  1. threading.Thread(target=Client.handlerEvent,name="exitChildProcess",args=(event,childProcess,)).start()
  2.  

Ejecuto un hilo que ejecutará el metodo estatico handlerEvent de la clase Client que se encargará de ver si la variable 'event' es activado
Código
  1. @staticmethod
  2. def handlerEvent(event,childProcesses):
  3.    while True:
  4.        if event.is_set():
  5.            print(childProcesses)
  6.            # terminate child process
  7.            break
  8.        time.sleep(.5)
  9.  

En el while ejecuto un subproceso, haciendo que para cada cliente que se conecte este se ejecutará en un proceso hijo.

La clase Client es la siguiente:
Código
  1. class Client:
  2. def __init__(self,conn,addr,event):
  3.    try:
  4.        self.conn, self.addr = conn, addr
  5.        print(logFile().message(f"Client {self.addr[0]} connected by port {self.addr[1]}", True, "INFO"))
  6.        self.__listenData()
  7.    except (KeyboardInterrupt,SystemExit) as err:
  8.        print(logFile().message(f"The client {self.addr[0]} left", True, "INFO"))
  9.    except BaseException as err:
  10.        type, object, traceback = sys.exc_info()
  11.        file = traceback.tb_frame.f_code.co_filename
  12.        line = traceback.tb_lineno
  13.        print(logFile().message(f"{err} in {file}:{line}", True, "ERROR"))
  14.    finally:
  15.        try:
  16.            self.conn.close()
  17.        except:
  18.            None
  19.        finally:
  20.            event.set()
  21. #[...]
  22. @staticmethod
  23. def handlerEvent(event,childProcesses):
  24.    while True:
  25.        if event.is_set():
  26.            print(childProcesses)
  27.            # terminate child process
  28.            break
  29.        time.sleep(.5)
  30.  

La idea es la siguiente:
El cliente se conecta y este se ejecuta la clase Client en un proceso hijo. Y así para cada cliente que se conecte. En el segundo cliente se ejecuta la clase Client en otro proceso hijo y así consecutivamente....

Vale, pues. El init de la clase tengo try...except para si el cliente se cierra este ejecuta el exception (alguno de los dos). Pero siempre cuando se cierra un cliente se ejecutará el finally (el primero). Que se encargará de hacer:
Código
  1. self.conn.close()
  2.  
Y después se ejecutará el finally:
Código
  1. event.set()
  2.  

Por la cual el metodo handlerEvent de la clase Client detectará que el event es true
Código
  1. @staticmethod
  2. def handlerEvent(event,childProcesses):
  3.    while True:
  4.        if event.is_set():
  5.            print(childProcesses)
  6.            # terminate child process
  7.            break
  8.        time.sleep(.5)
  9.  
y ejecutará lo que hay dentro del if. Mi idea es coger el PID del proceso hijo que ha hecho el event.set(). Pues así puedo hacer un for y matar el proceso que coincida con el PID. Pero como lo hago?



En el cliente cuando hago el:
Código
  1. event.set()
  2.  
puedo obtener el PID del proceso hijo haciendo:
Código
  1.        finally:
  2.            print(os.getpid())
  3.            event.set()
  4.  

Sí hago esto si me obtiene el PID del hijo, pues este PID tendría que enviarlo al handlerEvent() como puedo hacer esto?





Si alguíen tiene alguna idea de como puedo hacerlo o alguna alternativa, lo agradeceria.

Gracias.
13  Programación / Scripting / Como obtengo los datos de la autorizacion (Basic Auth) en un request API | Python Django en: 18 Septiembre 2021, 21:33 pm
Buenos dias, ¿como estais?  :D

Tengo un pequeño problemilla. Os cuento, estoy haciendo una API en Django [sin Django REST Framework  :silbar:] y esta API el usuario puede utilizarla si se autentifica con metodo Basic Auth

Donde pone Username es la Password
Y donde pone password es el OTP

Mi API hace esto:
Código
  1. @csrf_exempt
  2.    def requests(self,req,table:str,columns:list=False):
  3.        try:
  4.            try:
  5.                if not loginAdmin(req.headers['password'], int(req.headers['otp'])):
  6.                    raise Exception("Access denied")
  7.            except:
  8.                raise Exception("You need authentication")
  9.            conn = sqlite3.connect(Environment().pathDB())
  10.            cursor = conn.cursor()
  11.  
es parte del codigo, pues yo estoy aqui seleccionando las keys password y otp del header, pero segun me he informado de que se muestra en el header en la key "Authorization" con encriptacion BASE64
https://learning.postman.com/docs/sending-requests/authorization/#basic-auth

Pero yo he hecho return de req.headers y no hay ninguna key llamada "Authorization" o "Authorization", pero en el postman si se ve

He estado buscando info y segun dicen si con req.META hay una HTTP_AUTHORIZATION, pero no se muestra ninguno
Citar
GATEWAY_INTERFACESERVER_PROTOCOLREQUEST_METHODQUERY_STRINGREQUEST_URISCRIPT_NAMEPATH_INFOPATH_TRANSLATEDHTTP_HOSTHTTP_USER_AGENTHTTP_ACCEPT_ENCODINGHTTP_ACCEPTHTTP_CONNECTIONSERVER_SIGNATURESERVER_SOFTWARESERVER_NAMESERVER_ADDRSERVER_PORTREMOTE_ADDRDOCUMENT_ROOTREQUEST_SCHEMECONTEXT_PREFIXCONTEXT_DOCUMENT_ROOTSERVER_ADMINSCRIPT_FILENAMEREMOTE_PORTmod_wsgi.script_namemod_wsgi.path_infomod_wsgi.process_groupmod_wsgi.application_groupmod_wsgi.callable_objectmod_wsgi.request_handlermod_wsgi.handler_scriptmod_wsgi.script_reloadingmod_wsgi.listener_hostmod_wsgi.listener_portmod_wsgi.enable_sendfilemod_wsgi.ignore_activitymod_wsgi.request_startmod_wsgi.request_idmod_wsgi.script_startwsgi.versionwsgi.multithreadwsgi.multiprocesswsgi.run_oncewsgi.url_schemewsgi.errorswsgi.inputwsgi.input_terminatedwsgi.file_wrapperapache.versionmod_wsgi.versionmod_wsgi.total_requestsmod_wsgi.thread_idmod_wsgi.thread_requests

Aqui dejo la API:
Código
  1. from sources import loginAdmin,Environment,logFile
  2. import sqlite3,re
  3. from django.urls import  path
  4. from django.http import JsonResponse, HttpResponse, QueryDict
  5. from django.views.decorators.csrf import csrf_exempt
  6.  
  7. """
  8. ==========================API REST==========================
  9. SYNTAX:
  10.    127.0.0.1/api[/table,table1,table3,...][/column]?<key>=[>|<|>=|<=]<value>&[|]<key>=[>|<|>=|<=]<value>&LIMIT=<min>[,max]
  11. ============================================================
  12. IMPORTANT:
  13.    For do a request you need authentication with password and OTP
  14.  
  15. EXAMPLES:
  16.    GET:
  17.        127.0.0.1/api/server -> SELECT * FROM server
  18.        127.0.0.1/api/server?LIMIT=5 -> SELECT * FROM server LIMIT 5
  19.        127.0.0.1/api/server?password=ejem&id=1&LIMIT=5,7 -> SELECT * FROM server WHERE password='ejem' AND id=1 LIMIT 5,7
  20.        127.0.0.1/api/server/otp,id -> SELECT otp,id FROM server
  21.        127.0.0.1/api/server/otp?id=1&password=hola -> SELECT otp FROM server WHERE id=1 AND password='hola'
  22.        127.0.0.1/api/server/otp?id=1&|password=hola -> SELECT otp FROM server WHERE id=1 OR password='hola'
  23.  
  24.    POST:
  25.        127.0.0.1/api/server -> INSERT INTO server (otp,ejem) VALUES (1234,'1233da')
  26.            Body x-www-form-urlencoded
  27.                key     value
  28.                --------------------
  29.                otp     1234
  30.                ejem    1233da
  31.  
  32.        IMPORTANT: The params in the url doesn't affect
  33.  
  34.    PUT:
  35.        127.0.0.1/api/server?port=8899&|password=h -> UPDATE server SET otp='1234', ejem='1233da' WHERE port=8899 OR password='h'
  36.            Body x-www-form-urlencoded
  37.                key     value
  38.                --------------------
  39.                otp     1234
  40.                ejem    1233da
  41.  
  42.    DELETE:
  43.        127.0.0.1/api/server?port=8899&password=h -> DELETE FROM server WHERE port=8899 AND password='h'
  44.            not body data
  45. """
  46.  
  47. class getData:
  48.    def __init__(self,data):
  49.        self.list = QueryDict(data)
  50.        self.output = ''
  51.  
  52.    # This method returns key1,key2,key3...
  53.    # For clause as SELECT, INSERT
  54.    def getKeys(self):
  55.        for t in self.list:
  56.            self.output+=f'{t},'
  57.        self.output = re.sub(r",$","",self.output)
  58.        return self.output
  59.  
  60.    # This method returns value1,value2,value3...
  61.    # For clause as SELECT, INSERT
  62.    def getValues(self):
  63.        for t in self.list:
  64.            try:
  65.                if int(self.list[t]):
  66.                    self.output+=f'{self.list[t]},'
  67.            except:
  68.                self.output += f"'{self.list[t]}',"
  69.        self.output = re.sub(r",$","",self.output)
  70.        return self.output
  71.  
  72.    # This method returns key1=value1, key2=value2, key3=value3
  73.    # being '=' the 'delimitator'
  74.    # For clause as UPDATE
  75.    def keysValues(self,delimitator):
  76.        for value in self.list:
  77.            self.output+=f"{value}{delimitator}'{self.list[value]}', "
  78.        self.output = re.sub(r", $", "", self.output)
  79.        return self.output
  80.  
  81. class Database:
  82.    # if there are columns, show it
  83.    def columns(self,columns):
  84.        if columns:
  85.            return  columns
  86.        else:
  87.            return "*"
  88.  
  89.    # This method add the operator specified in the url
  90.    def keyWhere(self,key):
  91.        operator = re.sub(r"[^>|<|=]","",key)
  92.        value = re.sub(r"[>|<|=]","",key)
  93.        if operator == "":
  94.            operator="="
  95.        try:
  96.            if int(value):
  97.                return f"{operator}{value}"
  98.        except:
  99.            return f"{operator}'{value}'"
  100.  
  101.    def LimitClause(self,params):
  102.        if params:
  103.            output = ''
  104.            for key in params:
  105.                if key=="LIMIT":
  106.                    output=f" LIMIT {params[key]}"
  107.            return output
  108.        else:
  109.            return ""
  110.  
  111.    # This method add AND or OR in each condition in WHERE
  112.    def WhereClause(self,params):
  113.        if params:
  114.            output=''
  115.            for key in params:
  116.                if key=="LIMIT":
  117.                    continue
  118.                operator = "OR" if key[0]=="|" else "AND"
  119.                if list(params).index(key) > 0:
  120.                    output+=f" {operator} {key[1::] if operator=='OR' else key}{self.keyWhere(params[key])}"
  121.                else:
  122.                    output += f"WHERE {key[1::] if operator=='OR' else key}{self.keyWhere(params[key])}"
  123.            return output
  124.        else:
  125.            return ""
  126.  
  127.    @csrf_exempt
  128.    def requests(self,req,table:str,columns:list=False):
  129.        try:
  130.            try:
  131.                if not loginAdmin(req.headers['password'], int(req.headers['otp'])):
  132.                    raise Exception("Access denied")
  133.            except:
  134.                raise Exception("You need authentication")
  135.            conn = sqlite3.connect(Environment().pathDB())
  136.            cursor = conn.cursor()
  137.            if req.method == "GET":
  138.                data = cursor.execute(f"SELECT {self.columns(columns)} FROM {table} {self.WhereClause(req.GET.dict())}{self.LimitClause(req.GET.dict())}")
  139.                data = list(data)
  140.                conn.close()
  141.                if len(data) == 0:
  142.                    data = None
  143.                return JsonResponse({
  144.                    "result": data
  145.                })
  146.            elif req.method == "POST":
  147.                if columns:
  148.                    raise Exception("POST not allowed")
  149.                cursor.execute(f"INSERT INTO {table} ({getData(req.body).getKeys()}) VALUES ({getData(req.body).getValues()})")
  150.                conn.commit()
  151.                conn.close()
  152.                return JsonResponse({"INSERT":True})
  153.            elif req.method == "PUT":
  154.                if columns:
  155.                    raise Exception("PUT not allowed")
  156.                cursor.execute(f"UPDATE {table} SET {getData(req.body).keysValues('=')} {self.WhereClause(req.GET.dict())}")
  157.                conn.commit()
  158.                conn.close()
  159.                return JsonResponse({"UPDATE": True})
  160.            elif req.method == 'DELETE':
  161.                if columns:
  162.                    raise Exception("DELETE not allowed")
  163.                cursor.execute(f"DELETE FROM {table} {self.WhereClause(req.GET.dict())}")
  164.                conn.commit()
  165.                conn.close()
  166.                return JsonResponse({"DELETE": True})
  167.        except sqlite3.Error as err:
  168.            return HttpResponse(logFile(True).message(f"DB -> {err}",True))
  169.        except Exception as err:
  170.            return HttpResponse({f"Error in the API REST -> {err}"})
  171. urlpatterns=[
  172.    path('<table>',Database().requests),
  173.    path('<table>/<columns>',Database().requests)
  174. ]
  175.  

¿Como yo puedo mostrar los datos del Auth? Muchas gracias.

P.D: Cualquier comentario, sugerencia u opinion sobre la mejora del código, lo agradecería mucho. Mil gracias.
14  Programación / Scripting / Acceder a una variable de una clase de un modulo python desde el exterior en: 12 Septiembre 2021, 23:36 pm
Código:
.
├── ClassAdmin
│   ├── ClassAdmin
│   │   ├── __init__.py
│   │   ├── settings.py
│   │   ├── static
│   │   │   ├── css
│   │   │   │   ├── fonts.css
│   │   │   │   ├── pageLogin.css
│   │   │   │   └── styles.css
│   │   │   ├── data.json
│   │   │   ├── fonts
│   │   │   │   └── Allura-Regular.ttf
│   │   │   ├── images
│   │   │   │   ├── ClassAdminLogo.png
│   │   │   │   └── wallpaper.png
│   │   │   └── js
│   │   ├── templates
│   │   │   ├── pageLogin.html
│   │   │   └── src
│   │   │       └── base.html
│   │   ├── urls.py
│   │   ├── views.py
│   │   └── wsgi.py
│   ├── ClassAdmin.sqlite3
│   └── manage.py
└── sources
    └── __init__.py

Buenas, tengo un modulo llamado sources que es una carpeta con el archivo __init__.py, en el propio archivo esta la siguiente clase:
Código
  1. class Environment:
  2.    def __init__(self):
  3.        self.directory = os.environ.get("CLASSADMIN")
  4.    def pathDB(self):
  5.        if platform.system() == "Windows":
  6.            return f"{self.directory}\\ClassAdmin\\ClassAdmin.sqlite3"
  7.        elif platform.system() == "Linux":
  8.            return f"{self.directory}/ClassAdmin/ClassAdmin.sqlite3"
  9.    def pathLog(self,name:str):
  10.        if platform.system() == "Windows":
  11.            return f"{self.directory}/{name}.log"
  12.        elif platform.system() == "Linux":
  13.            return f"/var/log/{name}.log"
  14.  
  15.  

Y desde el archivo settings.py haciendo el import quiero acceder a la variable directory que esta en el init de la clase Environment.
Código
  1. from sources import *
  2. STATIC_ROOT = f'{Environment().directory}/ClassAdmin/ClassAdmin/static'
  3.  
Pero esto me devuelve None
Citar
[Errno 2] No such file or directory: 'None/ClassAdmin/ClassAdmin/static/data.json'

Porque pasa esto? si al hacer una clase con una variable self en el init puedes acceder a ella, no entiendo.

Que esta ocurriendo?
Gracias
15  Comunicaciones / Android / Crear servicios como archivos .service pero para android en: 28 Agosto 2021, 23:00 pm
Buenas! Quisiera crear un servicio en android (mi huawei p10) que cuando arrenque el telefono se incie un servicio que ejecute un script en python de conexion sockets (cliente).

Similar a como si fuera un archivo .service de linux....¿Existe la posibilidad de eso? Modificando algo del arbol de directorios de Storage o Card.....He visto posts en internet sobre ello, pero creando codigo JAVA y para una aplicacion apk. en concreto. Mi idea en crear un servicio pero que no cuelga de ninguna apk.

Se puede conseguir eso de alguna manera?

Muchas gracias.
16  Sistemas Operativos / Windows / Problemas con caracteristicas de windows en: 16 Julio 2021, 11:27 am
Buenos dias.

Estoy configurando un sistema windows 7 Embedded, lo estoy configurando con un usuario administrador local en un equipo local sin dominio. Y en el proceso debo de acceder a las caracteristicas de windows accediendo a Panel de Control > Programas > Programas y Caracteristicas > Activar o desactivar caracteristicas de windows. El problema que tengo es que esta opción esta deshabilitada, y me salta este mensaje: "El administrador del sistema deshabilitó las caracteristicas de windows".

Esto debe ser las políticas de grupo. He buscado en internet y me sale un posible solución que es ir a W+R > gpedit.msc y en la ventana buscamos Configuración de usuario > Plantillas Administrativas > Panel de Control > Programas

  • Ahí abrá una opción que es: ocultar las "caracteristicas de windows". Este esta en estado "no configurada", por la cual el problema no está ahí. Ya que si "El administrador del sistema deshabilitó las caracteristicas de windows". teoricamente deberia esta en "Habilitada". Pues esta no esta.
  • También lo he mirado en el editor de registro de windows en la ruta HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\, según he visto al haber el mensaje "El administrador del sistema deshabilitó las caracteristicas de windows", en esta ruta deberia de haber una carpeta llamada Programas y dentro el archivo de configuración con clave DWORD NoWindowsFeatures. Que su valor deberia ser 1 y deberia de ponerlo a 0, para deshabilitar el acceso a las caracteristicas de windows. Pues para empezar no existe ni la carpeta. (Puedo crearlo yo?)
  • También la opción de acceder a las caracteristicas de windows a traves del CMD, no me va. Ya que no me aparece ninguna lista.
  • He mirado en el sistema y en la herramienta MMC, no existe configuración (la raiz esta vacia)
  • Ademas accediendo a MMC y creando una nueva directiva de grupo para el usuario administrador con ocultar las "caracteristicas de windows" deshabilitado, no me funciona.

¿Saben de alguna manera como puedo deshabilitar las "caracteristicas de windows"? Donde se modifican las politicas de grupo en especifico el grupo "administradores"?

Gracias.
17  Programación / Desarrollo Web / fetch en clase me devuelve undefined | javascript en: 15 Mayo 2021, 16:10 pm
En el HTML llamo al script panel.js con tipo module
Código
  1. <script src="../js/panel.js" type="module"></script>

Ahroa bien en el archivo panel.js
panel.js
Código
  1. import {DB} from './crud.js';
  2. const API='http://localhost:5000/miramar';
  3. const formLogin=document.querySelector("body #formLogin");
  4.  
  5. const login=(e)=>{
  6.    e.preventDefault();
  7.    let password = formLogin['pass'].value;
  8.    let user = formLogin['user'].value;
  9.    let empleados=new DB(`${API}/empleados/`).show();
  10.    console.log(empleados);
  11. }
  12.  
  13. const init=()=>{
  14.    formLogin.addEventListener("submit",login);
  15. }
  16.  
  17. init();
  18.  
Cuando hago click en submit del formulario este me recoge los datos del formulario y también quiero que me recoja los datos de una peticion fetch a una API que tengo.
Para ello creo la clase DB() con el metodo show() para que me devuelva el objecto.

La clase esta definida en el archivo crud.js
Código
  1. export class DB{
  2.    constructor(API){
  3.        this.API=API;
  4.        this.result;
  5.    }
  6.    show(){
  7.        fetch(this.API)
  8.        .then(res=>res.json())
  9.        .then(data=>this.result=data);
  10.        return this.result;
  11.    }
  12. }
  13.  

el problema que tengo es que en el archivo panel.js hago
Código
  1.    let empleados=new DB(`${API}/empleados/`).show();
  2.    console.log(empleados);
  3.  

y me devuelve undefined.

Ahora bien.
Si lo hago con promesas, me devuelve que el estado de la promesa es pending

Código
  1. export class DB{
  2.    constructor(API){
  3.        this.API=API;
  4.        this.result;
  5.    }
  6.    async show(){
  7.        /*fetch(this.API)
  8.         .then(res=>res.json())
  9.         .then(data=>this.result=data);
  10.         return this.result;*/
  11.        let res = await fetch(this.API);
  12.        let data = await res.json();
  13.        this.result=data;
  14.        return this.result;
  15.    }
  16.  

Pero si en el console.log le pongo un setTImeout de 1 segundo me devulve la promesa con los valores, pero no puedo obtener sus valores, o como los obtengo?
Código
  1.   setTImeout(()=>console.log(empleados),1000)
  2.  
Pero si el setTimeout lo hago dentro de la clase no me funciona, solo en el panel.js
PD.
Los datos que quiero coger son:
Código
  1. [
  2.  {
  3.    "APELLIDOS": [
  4.      "León",
  5.      "Guerrero"
  6.    ],
  7.    "_id": "609e833e6746526127be53e6",
  8.    "NOMBRE": "Jhilmar",
  9.    "NACIMIENTO": "2002-02-19T00:00:00.000Z",
  10.    "GENERO": "M",
  11.    "CONTRASENA": "Jhilmar"
  12.  },
  13.  {
  14.    "APELLIDOS": [
  15.      "Antonio",
  16.      "Salazar"
  17.    ],
  18.    "_id": "609e83f26746526127be53e7",
  19.    "NOMBRE": "Juan",
  20.    "NACIMIENTO": "2002-02-19T00:00:00.000Z",
  21.    "GENERO": "M",
  22.    "CONTRASENA": "Juan Antonio"
  23.  },
  24.  {
  25.    "APELLIDOS": [
  26.      "Napola"
  27.    ],
  28.    "_id": "609e84116746526127be53e8",
  29.    "NOMBRE": "Carmen",
  30.    "NACIMIENTO": "2002-02-19T00:00:00.000Z",
  31.    "GENERO": "F",
  32.    "CONTRASENA": "Carmen"
  33.  }
  34.  
https://drive.google.com/drive/folders/1pSGu0ql9ZklDvDCu56vuh16FYB-HPwbU?usp=sharing

Gracias
18  Programación / Desarrollo Web / añadir contenido en un archivo JSON externo a traves de JS con fetch() en: 28 Febrero 2021, 21:09 pm
Buenas, quisiera añadir un objecto a un JSON externo con javascript, esto es posible con el fetch() de JS o XMLHttpRequest?

Es decir, yo tengo un JSON en /jon/users.json (inicialmente esta vacio)
Código
  1. [
  2. ]
  3.  

Y en mi javascript genero un objecto que lo guardo en una variable, por ejemplo
Código
  1. let data = {
  2.  "nick": "Drakaris",
  3.  "password": "d404559f602eab6fd602ac7680dacbfaadd13630335e951f097af3900e9de176b6db28512f2e000b9d04fba5133e8b1c6e8df59db3a8ab9d60be4b97cc9e81db",
  4.  "pleasures": [
  5.    "romantic"
  6.  ],
  7.  "dateOfBirth": "2021-02-09",
  8.  "gender": "female"
  9. }
  10.  
y este lo quiero guardar en el JSON /json/users.json

Para ello, según tengo entendido se puede hacer con el fetch() metodo POST?

Algo así
Código:
            let data = getDataForm() //obtengo el objeto generado dinamicamente
            fetch("json/users.json",{
                method: "POST",
                body: JSON.stringify(data),
                headers:{
                    "Content-type":"application/json"
                }
            }).then((result)=>result.json())
            .then(dat=>console.log(dat))
            .catch(err=>console.log(err));

Esto me devuelve una array vacio y cuando voy al archivo JSON no me a implementado nada.

Se puede hacer lo quiero hacer?
https://drive.google.com/drive/folders/1BiDcjrPZ3-8qtq9B7ps-dSIu6-neaqY-?usp=sharing

Gracias de antemano
19  Programación / Desarrollo Web / equivalente a eval()? | javascript en: 24 Enero 2021, 14:21 pm
Buenas, tengo un script hecho, que utiliza mucho la funcion eval(), pero no es nada recomendable, en estos casos. Como podría reemplazarlo?

trabajar con arrays/objetos, en este caso añadir:
Código
  1. eval("$HERO." + group + ".push('" + item.id.replace("Check","") + "')")
  2.  

eliminar objetos
Código
  1. eval("delete $HERO." + item[0]);
  2.  

operaciones
Código
  1. eval("$HERO.skills." + skill + "" + operator + "=" + countSkill);
  2.  

Código
  1. eval("$ELEMENTSPOINTS." + type + "." + element);
  2.  
En este caso quiero mostrar en el objeto $ELEMENTSPOINTS el elemento de su tipo, se que se puede hacerse así:
Código
  1. $ELEMENTSPOINTS[type];
  2.  
pero es solo para mostrar el subobjecto ELEMENTSPOINTS con todas sus propiedades, pero no el valor de uno en concreto.


Utilizo tanto el eval(), porque es dinamico, todos los eval estan dentro de una funcion que contiene parametros, cuyos parametros los utilizo en el eval(). Como lo hago sin utilizarlo?


Los objetos, son los siguientes:
Código
  1. $HERO={
  2.    name:null,
  3.    magic:[],
  4.    weapons:[],
  5.    gems:[],
  6.    skills:{
  7.        attack:0,
  8.        defenser:0,
  9.        speed:0
  10.    }
  11. }
  12. const $ELEMENTSPOINTS={
  13.    magic:{ // +
  14.        lightning:{
  15.            attack:10
  16.        },
  17.        ice:{
  18.            attack:4,
  19.            defenser:3
  20.        },
  21.        fire:{
  22.            attack:8
  23.        },
  24.        wind:{
  25.            defenser:2
  26.        }
  27.    },
  28.    weapons:{
  29.        sword:{
  30.            attack:5,
  31.            speed:1 // the speed substraction in the operation
  32.        },
  33.        shield:{
  34.            defenser:10,
  35.            speed:5
  36.        },
  37.        hatchet:{
  38.            attack:10,
  39.            speed:4
  40.        },
  41.        crossbow:{
  42.            attack:7,
  43.            speed:3
  44.        }
  45.    },
  46.    gems:{ // +
  47.        diamond:{
  48.            lightning:2,
  49.            ice:3,
  50.            fire:5,
  51.            wind:4
  52.        },
  53.        esmerald:{
  54.            lightning:2,
  55.            ice:3,
  56.            fire:5,
  57.            wind:4
  58.        },
  59.        ruby:{
  60.            lightning:3,
  61.            ice:2,
  62.            fire:3,
  63.            wind:2
  64.        },
  65.        sapphire:{
  66.            lightning:2,
  67.            ice:2,
  68.            fire:3,
  69.            wind:4
  70.        }
  71.    }
  72. }
  73.  

Un ejemplo de cuando utilizo eval:
Código
  1. ActionSkills = (type,element,operator)=>{
  2.        if(type != "gems"){
  3.            /*
  4.                 The buttons' group aren't gems, so all skills' type got by the specificed element's sub-objects are iterated, and each iteration
  5.                 gets skill's number and if the skill's type is 'speed' and operator is '+' the operator is become to '-'
  6.                 (because the speed substraction of speed's total count), else if the operator is '-', it is became in '+' (because the button is inactive).
  7.  
  8.                 Finally is add/substraction the value get with the skill's total specificed. Thanks to eval()
  9.  
  10.                 Also, if the button's group clicked is 'magic', apart from does previous it, this runs the function ActionGems()
  11.             */
  12.            for(skill in eval("$ELEMENTSPOINTS." + type + "." + element)){
  13.                countSkill = eval("$ELEMENTSPOINTS." + type + "." + element + "." + skill);
  14.                //console.log(skill + ":" + countSkill);
  15.                (skill == "speed" && operator == " + ")?(operator = "-"):(skill == "speed" && operator == "-")?(operator = " + "):null;
  16.                eval("$HERO.skills." + skill + "" + operator + "=" + countSkill);
  17.            }
  18.  
  19.            (type == "magic")?ActionGems(type,element,operator):null;
  20.        }else{
  21.            /*
  22.                 As are gems, the operation is different. So this executes the function ActionGems()
  23.             */
  24.            ActionGems(type,element,operator);
  25.        }
  26.    }
  27.  

Gracias de antemano
20  Programación / Desarrollo Web / ¿como modificar un array declarada en un archvio js desde un onclick? en: 13 Diciembre 2020, 11:54 am
Buenas, estoy haciendo un registro de jugadores, de manera dinamica, que cuando rellenas un formulario, se guarda en un array los datos y posteriormente se añade a una lista HTML un item con el jugador.
img: https://drive.google.com/file/d/1hOvYRr46p17064tz_1pf9hkF8Lw764Rr/view?usp=sharing

Cuando pasas por el item del jugador, puedes eliminar el usuario, lo hice con un evento onclick, pero mi problema esta que el onclick debe acceder al array definida en el archivo js para poder eliminar el subarray del jugador.

IMPORTANTE: los subarrays se añaden dinamicamente durante el envio del formulario.
file js:
Código
  1. var players=[
  2.    ["player1"],
  3.    ["player2"],
  4. ];
  5.  

HTML:
Código
  1. <html>
  2.    <head>
  3.         <script src='file.js'></script>
  4.    </head>
  5.                        <i class="fas fa-times-circle close-player" onclick="
  6.                            players.splice(this.parentNode.id,1);
  7.                            this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode);
  8.                            console.log(players);
  9.                        "></i>
  10. </html>
  11.  

El problema esta en que me sale como si players no estuviera definido.
Citar
Uncaught ReferenceError: players is not defined

Como lo puedo resolver con onclick?

Gracias
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines